iTextSharp:如何将 PDF 图像添加为可移动元素?
iTextSharp: How to add image of PDF as movable element?
使用 iTextSharp 将内容添加到 PDF,我可以使用以下代码添加另一个 PDF 的图像:
void addImageFromPDF(string inputPath, string imagePath, string outputPath, int pageNumber)
{
PdfReader pdfReader_image = new PdfReader(imagePath);
PdfReader pdfReader = new PdfReader(inputPath);
PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(outputPath, FileMode.Create));
PdfImportedPage page = pdfStamper.GetImportedPage(pdfReader_image, 1);
pdfStamper.GetOverContent(pageNumber).AddTemplate(page, 100, 100);
pdfStamper.Close();
}
但是,这会将图像 PDF 添加为静态元素——我无法单击一次以突出显示它,然后拖动它或将其删除,就像我可以使用注释一样。有没有办法创建一个 PdfAnnotation
(或相对可移动的图形元素),其内容为 PdfImportedPage
?
请查看 stamp_annotation.pdf 文档。此文档有带有 iText 徽标的图章注释。由于它是注释,因此在 Adobe Reader 中查看文档的用户可以移动它(这在其他 PDF 查看器中可能无法正常工作)。
此示例的代码可在此处找到:AddStamp
public void manipulatePdf(String src, String dest) throws IOException, DocumentException {
PdfReader reader = new PdfReader(src);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
Image img = Image.getInstance(IMG);
float w = img.getScaledWidth();
float h = img.getScaledHeight();
Rectangle location = new Rectangle(36, 770 - h, 36 + w, 770);
PdfAnnotation stamp = PdfAnnotation.createStamp(
stamper.getWriter(), location, null, "ITEXT");
img.setAbsolutePosition(0, 0);
PdfContentByte cb = stamper.getOverContent(1);
PdfAppearance app = cb.createAppearance(w, h);
app.addImage(img);
stamp.setAppearance(PdfName.N, app);
stamp.setFlags(PdfAnnotation.FLAGS_PRINT);
stamper.addAnnotation(stamp, 1);
stamper.close();
reader.close();
}
在此示例中,我们将图章注释添加到现有文档中。如果您要从头开始创建文档,则需要将 stamper.getWriter()
替换为 writer
,将 stamper.getOverContent(1)
替换为 writer.getDirectContent()
,将 stamper.addAnnotation(stamp, 1)
替换为 writer.addAnnotation(stamp)
。
使用 iTextSharp 将内容添加到 PDF,我可以使用以下代码添加另一个 PDF 的图像:
void addImageFromPDF(string inputPath, string imagePath, string outputPath, int pageNumber)
{
PdfReader pdfReader_image = new PdfReader(imagePath);
PdfReader pdfReader = new PdfReader(inputPath);
PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(outputPath, FileMode.Create));
PdfImportedPage page = pdfStamper.GetImportedPage(pdfReader_image, 1);
pdfStamper.GetOverContent(pageNumber).AddTemplate(page, 100, 100);
pdfStamper.Close();
}
但是,这会将图像 PDF 添加为静态元素——我无法单击一次以突出显示它,然后拖动它或将其删除,就像我可以使用注释一样。有没有办法创建一个 PdfAnnotation
(或相对可移动的图形元素),其内容为 PdfImportedPage
?
请查看 stamp_annotation.pdf 文档。此文档有带有 iText 徽标的图章注释。由于它是注释,因此在 Adobe Reader 中查看文档的用户可以移动它(这在其他 PDF 查看器中可能无法正常工作)。
此示例的代码可在此处找到:AddStamp
public void manipulatePdf(String src, String dest) throws IOException, DocumentException {
PdfReader reader = new PdfReader(src);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
Image img = Image.getInstance(IMG);
float w = img.getScaledWidth();
float h = img.getScaledHeight();
Rectangle location = new Rectangle(36, 770 - h, 36 + w, 770);
PdfAnnotation stamp = PdfAnnotation.createStamp(
stamper.getWriter(), location, null, "ITEXT");
img.setAbsolutePosition(0, 0);
PdfContentByte cb = stamper.getOverContent(1);
PdfAppearance app = cb.createAppearance(w, h);
app.addImage(img);
stamp.setAppearance(PdfName.N, app);
stamp.setFlags(PdfAnnotation.FLAGS_PRINT);
stamper.addAnnotation(stamp, 1);
stamper.close();
reader.close();
}
在此示例中,我们将图章注释添加到现有文档中。如果您要从头开始创建文档,则需要将 stamper.getWriter()
替换为 writer
,将 stamper.getOverContent(1)
替换为 writer.getDirectContent()
,将 stamper.addAnnotation(stamp, 1)
替换为 writer.addAnnotation(stamp)
。