2014-01-23 2 views
-1

나는 pdf 내보내기 기능을 사용하고 있는데, 내 문제는 내 문서의 작은 조각에 사용하고있는 글꼴을 변경하는 것이다.어떻게 내가 만든 일부 PDF 개체에서 뭔가를 변경할 수 있습니까?

굵은 글씨체로 새 개체를 만들어야하나요? 또는 이미 만든 글꼴 개체를 변경할 수 있습니까? 내가 어떻게 할 수 있니?

+0

그러나이 주제에서 질문은 또 다른 것이 었습니다 ... 지금, 나는 이미 생성 된 객체에서 어떻게 무언가를 바꿀 수 있는지 알고 싶습니다. –

+1

이것은 이전에 물어 본 질문과 동일한 단어입니다. 먼저 PDF 파일을 생성 한 다음 수정하려고하면 너무 큰 해머를 사용합니다. PDF를 처음 생성 할 라이브러리를 사용하는 방법에 대한 자세한 내용을 제공해야 제대로 생성 할 수 있습니다. 귀하의 질문을 정확하게 말하고 배경 정보를 제공하는 데 더 많은 시간을 * 보내십시오 - 실제로 누군가 당신을 도울 수 있습니다. –

답변

2

here을 보시면 문제의 범위를 알 수 있습니다. 프로그래밍 방식으로 페이지의 텍스트를 변경하는 것은 확실히 가능하지만 생각만큼 간단하지는 않습니다. 여기에 예제가 있습니다. 페이지에 "5 개의 파란색 거북이"라는 텍스트가 있고 '파란색'을 굵은 글꼴로 표시한다고 가정 해 보겠습니다. 운이 좋다면, PDF 파일의 코드는 다음과 같이 표시됩니다

BT /F0 12 72 300 Td (five) 82 300 Td (blue) Td 92 300 (turtles) Td ET 

"다섯"그릴 (72 300)로 이동, 텍스트를 시작 F0, 12 점에 내 글꼴을 설정입니다 .. .이 경우 최종 텍스트

, 당신은 글꼴의 변화를 삽입하고 트릭 당신이 단어를 찾을 때, 당신은 글꼴이 무엇인지 알 것을 아는 것입니다

BT /F0 12 72 300 Td (five) /F1 12 82 300 Td (blue) Td /F0 12 92 300 (turtles) Td ET 

다시 설정해야 할 것 그 시점에서.

하지만 악화됩니다. 그 단어는 "파란색"현재 메트릭 및 폰트 렌더링 특성을 사용하여 페이지에 배치 최대 텍스트를 분할 차례로 될 경우 당신은 찾을 필요가

BT /F0 12 72 300 Td (five blue turtles) Td ET 

: 텍스트는이 같은 페이지에 배치되는 경우는 어떻게 그것은 당신이 위에서 보았던 것입니다. 이것은 결코 의미있는 일이 아닙니다.하지만 함께 작업하는 라이브러리가 메트릭을 수행하는 도구를 제공 할 수 있기를 바랍니다.

당신이 처리해야 할 다음 문제는 글꼴 인코딩입니다. 다시 한번 말하지만, 작업중인 라이브러리는 문자열의 'a'가 반드시 해당 문자의 문자 모양에 매핑되지 않을 수도 있기 때문에이를 처리하는 방법을 알고 있습니다. 'a', 글꼴 서브 세트에 사용되는 알고리즘에 따라 다릅니다 (, GhostScript를보고 있습니다).

그런 다음 사용하려는 글꼴을 실제로 사용할 수 없다는 사실을 처리해야 할 수도 있습니다 (파일에 없거나 전체 글꼴이 아님).

그리고 PDF가 파일 위치에 따른 파일 형식 인 부분에 대해서는 아무 것도 언급하지 않으며 그에 대한 대처 또한해야합니다.

수정 다른 답변에 대한 귀하의 의견을 읽으면서보다 철저하게 사용하는 라이브러리에 대한 설명서를 읽어야합니다. 어떤 라이브러리를 사용하고 있는지 알려주고이 객체를 생성하는 코드를 보여줘야합니다.

예를 들어, 내가 (면책 조항 : Atalasoft에서 일하고 있고, 무료가 아니며, 도서관을 썼고, 저는 Acrobat에서 일했으며, 저는 변호사가 아닙니다) 이 같은 :

private double MeasureLine(PdfTextLine line, PdfGeneratedDocument doc) 
{ 
    PdfFontResource font = doc.Resources.Fonts.Get(line.FontName); 
    if (font == null) throw new ArgumentException("line"); 
    return font.Metrics.MeasureText(line.Text, line.FontSize).X; 
} 


PdfGeneratedDocument doc = new PdfGeneratedDocument(); 
PdfGeneratedPage page = doc.AddPage(PdfDefaultPages.Letter); 
string plainFontResName = doc.Resources.Fonts.Add("Arial"); 
string boldFontResName = doc.Resources.Fonts.Add("Arial"); 

PdfPoint where = new PdfPoint(72, 300); 
PdfTextLine fiveline = new PdfTextLine("five ", where); 
fiveline.FontName = plainFontResName; fiveline.FontSize = 12.0; 
page.DrawingList.Add(fiveline); 

where = new PdfPoint(where.X + MeasureText(fiveline), where.Y); 
PdfTextLine blueline = new PdfTextLine("blue ", where); 
blueline.FontName = boldFontResName; blueline.FontSize = 12.0; 
page.DrawingList.Add(blueline); 

where = new PdfPoint(where.X + MeasureText(blueline), where.Y); 
PdfTextLine turtlesline = new PdfTextLine("turtles", where); 
turtlesline.FontName = plainFontResName; turtlesline.FontSize = 12.0; 
page.DrawingList.Add(turtlesline); 

doc.Save("somepdf.pdf"); 

그리고 현실에서

, 당신은 아마 PdfStyledTextBox 같은 높은 수준의 모양 객체를 사용하거나 수치는 당신을위한 글꼴 스타일 변경을 수행하는 것이 자신을 만들 것입니다.

+0

+1; 스트레스 ** ** 운이 좋으면 ... ** – mkl

+0

@CleitonRibeiro : 정확히이 코드가 글꼴 색을 변경한다고 생각하게 만들었습니까? 즉, 샘플 텍스트가 "five ** big ** turtles"로 변경되면 글꼴 * 크기 *가 변경 될 것이라고 생각합니까? (OTOH, 주각 * 일반 및 '굵게'텍스트 모두 동일한 글꼴을 선택합니다.) – usr2564301

+0

나를 위해 작동하지 않습니다 ... 나는 시도 : 인쇄 # 1, "BT/F1 12 10 746 Td (titulo) Td ET "하지만 아무 일도 일어나지 않습니다. –

관련 문제