2013-03-05 2 views
0

я использовал следующий код, используя itextsharp библиотеки, чтобы добавить текст в формат PDF. (Получил код из ссылки ITextSharp insert text to an existing pdfITextSharp включает все страницы из входного файла

Dim reader As New PdfReader(oldFile) 
    Dim size As iTextSharp.text.Rectangle = reader.GetPageSizeWithRotation(1) 
    Dim document As New iTextSharp.text.Document(size) 

    ' open the writer 
    Dim fs As New FileStream(newFile, FileMode.Create, FileAccess.Write) 
    Dim writer As PdfWriter = PdfWriter.GetInstance(document, fs) 
    document.Open() 

    ' the pdf content 
    Dim cb As PdfContentByte = writer.DirectContent 

    ' select the font properties 
    Dim bf As BaseFont = BaseFont.CreateFont(BaseFont.ZAPFDINGBATS, BaseFont.CP1252, BaseFont.NOT_EMBEDDED) 
    'cb.SetColorFill(GrayColor.DARK_GRAY) 
    cb.SetFontAndSize(bf, 8) 
    cb.BeginText() 
    Dim Text As String = "l" 
    ' put the alignment and coordinates here 
    cb.ShowTextAligned(2, Text, 84, 729, 0) 
    cb.EndText() 

    Dim bf1 As BaseFont = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED) 
    cb.SetFontAndSize(bf1, 8) 
    cb.BeginText() 
    Dim text1 As String = "Navaneeth A" 
    cb.ShowTextAligned(1, text1, 65, 690, 0) 
    cb.EndText() 

    ' create the new page and add it to the pdf 
    Dim page As PdfImportedPage = writer.GetImportedPage(reader, 1) 
    cb.AddTemplate(page, 0, 0) 

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

Теперь проблема источник PDF имеет около 5 pages.But выходной файл, созданный с помощью этого кода имеет только первую страницу. Так как я могу включать в себя все страницы исходного файла в выходной файл? Источник PDF ссылка http://law.incometaxindia.gov.in/DITTaxmann/IncomeTaxRules/PDF/Ay-2012-2013/SAHAJ2012_14.pdf


Dim reader As New PdfReader(oldFile) 
    Using ms = New MemoryStream() 
     Dim stamper As New PdfStamper(reader, ms) 
     'Using stamper 'As New PdfStamper(reader, ms) 
     stamper.RotateContents = False 
     Dim canvas As PdfContentByte = stamper.GetOverContent(1) 
     ColumnText.ShowTextAligned(canvas, Element.ALIGN_LEFT, New Phrase("Hello people!"), 36, 540, 0) 
     'End Using 

     Dim result As Byte() = ms.ToArray() 
     File.WriteAllBytes(newFile, result) 
     System.Diagnostics.Process.Start(newFile) 
    End Using 

Я сделал следующие изменения, но его файл not working.result был всего лишь 1kb-файлом.

ответ

1

Вы, к сожалению, нашли образец кода, который не должен использоваться. Чтобы управлять существующими PDF-файлами, вы должны использовать PdfStamper, а не PdfWriter.

Ваш код (даже после исправления для копирования всех страниц) не копирует интерактивные функции (формы, другие аннотации ...). Вы вместо этого должны основывать свой код на Webified iTextSharp ExampleStampText.cs объяснена в chapter 6 из iText in Action — 2nd Edition:

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

Вы можете контролировать шрифт и цвет, тоже, если вы измените этот код так:

[...] 
Font FONT = new Font(Font.FontFamily.HELVETICA, 12, Font.BOLD, new GrayColor(0.75f)); 
PdfContentByte canvas = stamper.GetOverContent(1); 
ColumnText.ShowTextAligned(
    canvas, 
    Element.ALIGN_LEFT, 
    new Phrase("Hello people!", FONT), 
    36, 540, 0 
); 
[...] 

PS Некоторые детали могут отличаться, если вам по каким-то причинам приходится использовать какую-то старую версию iTextSharp (другие вопросы от вас, похоже, подразумевают, что вы используете VB6 ...). Однако даже тогда вы должны переключиться на использование PdfStamper.

+1

Отличный ответ. Это загадка, почему многие люди предпочитают копировать неправильный пример кода. Обратите внимание, что примеры можно найти здесь: http://tinyurl.com/iiacsCH06 Измените 06 на любое число от 00 до 16, чтобы получить примеры из других разделов. –

+0

@mkl См. Мой вопрос здесь http://stackoverflow.com/questions/15241337/pdf-setting-the-font-color-to-the-text –

+0

@winman Вы должны начать принимать ответы, чтобы сделать прозрачным то, что считалось полезным , – mkl

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