2013-05-02 4 views
4

Я добавляю текст к уже созданному pdf-документу, используя этот метод. ITextSharp insert text to an existing pdf В основном он использует PdfContentByte, а затем добавляет шаблон контента на страницу.ITextSharp, добавляющий текст. Некоторый текст не отображается

Я нахожу, что в некоторых областях файла текст не отображается. Кажется, что текст, который я добавляю, появляется за содержимым, которое уже находится на странице? Я сплющил документ pdf до него, просто являясь образами, но у меня все еще возникает такая же проблема с сплющенным файлом.

У кого-нибудь возникли проблемы с добавлением текста, скрытого с помощью Itextsharp?

Я также попытался использовать DirectContentUnder, как это было предложено в этой связи не увенчались успехом .. iTextSharp hides text when write

Вот код, я использую ... С этим я пытаюсь в основном наложения миллиметровка поверх PDF. В этом примере в верхнем левом углу каждой страницы, которая не заполняется, находится поле. В этом месте есть изображение в оригинале pdf. А на 4-й и 5-й страницах есть поля, которые не заполняются, но они, похоже, не являются изображениями.

PdfReader reader = new PdfReader(oldFile); 
iTextSharp.text.Rectangle size = reader.GetPageSizeWithRotation(1); 
Document document = new Document(size); 

// open the writer 
FileStream fs = new FileStream(newFile, FileMode.Create, FileAccess.Write); 
PdfWriter writer = PdfWriter.GetInstance(document, fs); 
document.Open(); 


// the pdf content 
PdfContentByte cb = writer.DirectContent; 


for (int i = 0; i < reader.NumberOfPages; i++) 
{ 
    document.NewPage(); 
    // select the font properties 
    BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); 

    cb.SetFontAndSize(bf, 4); 
    cb.SetColorStroke(BaseColor.GREEN); 
    cb.SetLineWidth(1f); 
    for (int j = 10; j < 600; j += 10) 
    { 
     WriteToDoc(ref cb, j.ToString(), j, 10);//Write the line number 
     WriteToDoc(ref cb, j.ToString(), j, 780);//Write the line number 
     if (j % 20 == 0) 
     { 
      cb.MoveTo(j, 20); 
      cb.LineTo(j, 760); 
      cb.Stroke(); 
     } 
    } 
    for (int j = 10; j < 800; j += 10) 
    { 

     WriteToDoc(ref cb, j.ToString(), 5, j);//Write the line number 
     WriteToDoc(ref cb, j.ToString(), 590, j);//Write the line number 
     if (j % 20 == 0) 
     { 
      cb.MoveTo(15, j); 
      cb.LineTo(575, j); 
      cb.Stroke(); 
     } 
    } 




// create the new page and add it to the pdf 
PdfImportedPage page = writer.GetImportedPage(reader, i + 1); 
cb.AddTemplate(page, 0, 0); 

} 

// close the streams and voilá the file should be changed :) 
document.Close(); 
fs.Close(); 
writer.Close(); 
reader.Close(); 

Спасибо за любую помощь, которую вы можете предоставить ... Я очень ценю это! Грег

ответ

4

Прежде всего: Если вы пытаетесь в основном наложения миллиметровка поверх PDF, почему вы первый рисовать миллиметровка и штамповать исходную страницу на него? Вы по существу underlaying бумага для печати, а не наложение it.

В зависимости от содержимого страницы ваша печатная бумага может легко покрываться. Например. если в содержимом страницы есть заполненный прямоугольник, в результате есть поле в верхнем левом углу каждой страницы, которая не заполняется.

Таким образом, просто сначала добавьте содержимое старой страницы, а затем добавьте изменения наложения.

Это, как говорится, для задачи внесения изменений в существующий PDF, используя PdfWriter и GetImportedPage, является менее оптимальным. На самом деле это задача для класса PdfStamper, который был сделан для штамповки дополнительного содержимого в существующих PDF-файлах.

E.g. посмотрите на sample StampText, ключевой код которого:

PdfReader reader = new PdfReader(resource); 
using (var ms = new MemoryStream()) 
{ 
    using (PdfStamper stamper = new PdfStamper(reader, ms)) 
    { 
    PdfContentByte canvas = stamper.GetOverContent(1); 
    ColumnText.ShowTextAligned(canvas, Element.ALIGN_LEFT, new Phrase("Hello people!"), 36, 540, 0); 
    } 
    return ms.ToArray(); 
} 
+0

Спасибо за вашу помощь! Я не совсем понял код, который использовал, и не понимал, что накладываю содержимое страницы поверх своего нового контента. Я просто переместил код, чтобы наложить содержимое страницы выше всего моего чертежа, и теперь он отлично работает. В будущем я также проверю PdfStamper. – smithygreg

+0

@smithygreg не могли бы вы разместить новый код или внести изменения в код –

Смежные вопросы