pdf上的可变数据

时间:2014-09-12 06:49:45

标签: c# itextsharp

我想在特定位置添加变量文本和缩略图。 具有字体样式,旋转等格式的文本。

 iTextSharp.text.pdf.PdfReader reader = null;
     Document document = new Document();
                   PdfWriter writer;
        writer = PdfWriter.GetInstance(document,
                       new FileStream(temp,
                       FileMode.Create, FileAccess.Write));
 reader = new iTextSharp.text.pdf.PdfReader(file);
                               size = reader.GetCropBox(1);

                   PdfContentByte cb = writer.DirectContent;
                   document.NewPage();
                   PdfImportedPage page = writer.GetImportedPage(reader,
                   pageNumber);
                   cb.AddTemplate(page, 0, 0);

                   document.Close();

这会将第一页复制到新文档。我想在新文档上添加文本和图像。怎么做?

1 个答案:

答案 0 :(得分:3)

许多人会在你的第一句话后停止阅读你的问题:

  

我想编辑现有的PDF

如果您阅读了chapter 6 of my book的介绍,您就会明白编辑这个词不是正确的词语。

继续阅读,并且我看到您使用DocumentPdfWriter在现有PDF上标记新内容。如果你努力阅读我的书的第6章,你就会明白这是错误的。您应该使用PdfStamper代替。

这是在线提供的示例之一:

public void manipulatePdf(String src, String dest) throws IOException, DocumentException {
    PdfReader reader = new PdfReader(src);
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
    Phrase header = new Phrase("Copy", new Font(FontFamily.HELVETICA, 14));
    for (int i = 1; i <= reader.getNumberOfPages(); i++) {
        float x = reader.getPageSize(i).getWidth() / 2;
        float y = reader.getPageSize(i).getTop(20);
        ColumnText.showTextAligned(
            stamper.getOverContent(i), Element.ALIGN_CENTER,
            header, x, y, 0);
    }
    stamper.close();
    reader.close();
}

您可以在以下网址上找到这些示例:

如果您需要将第6章中的示例移植到C#,请访问以下网址:http://tinyurl.com/itextsharpIIA2C06

<强>更新

PdfStamper支持:

  • 字体嵌入:是的,如果填写正确,则嵌入字体,
  • 字体大小:是的,很明显,
  • font family:提供字体程序,字体程序知道字体系列,
  • 路线:对于单行:使用showTextAligned();对于文本块使用ColumnText警告:了解文本模式复合模式之间的区别)
  • 旋转:对于单线,这只是提供旋转角度的问题;对于文本块,创建一个Form XObject并使用旋转添加此对象
  • ...