有什么方法可以从 Java 编辑 PDF 吗?
我有一个 PDF 文档,其中包含我需要使用 Java 替换的文本占位符,但我看到的所有库都是从头开始创建 PDF 和小的编辑功能。
无论如何我可以编辑 PDF 或者这是不可能的?
原文由 Ammar 发布,翻译遵循 CC BY-SA 4.0 许可协议
有什么方法可以从 Java 编辑 PDF 吗?
我有一个 PDF 文档,其中包含我需要使用 Java 替换的文本占位符,但我看到的所有库都是从头开始创建 PDF 和小的编辑功能。
无论如何我可以编辑 PDF 或者这是不可能的?
原文由 Ammar 发布,翻译遵循 CC BY-SA 4.0 许可协议
我修改了一些发现的代码,它的工作方式如下
public class Principal {
public static final String SRC = "C:/tmp/244558.pdf";
public static final String DEST = "C:/tmp/244558-2.pdf";
public static void main(String[] args) throws IOException, DocumentException {
File file = new File(DEST);
file.getParentFile().mkdirs();
new Principal().manipulatePdf(SRC, DEST);
}
public void manipulatePdf(String src, String dest) throws IOException, DocumentException {
PdfReader reader = new PdfReader(src);
PdfDictionary dict = reader.getPageN(1);
PdfObject object = dict.getDirectObject(PdfName.CONTENTS);
PdfArray refs = null;
if (dict.get(PdfName.CONTENTS).isArray()) {
refs = dict.getAsArray(PdfName.CONTENTS);
} else if (dict.get(PdfName.CONTENTS).isIndirect()) {
refs = new PdfArray(dict.get(PdfName.CONTENTS));
}
for (int i = 0; i < refs.getArrayList().size(); i++) {
PRStream stream = (PRStream) refs.getDirectObject(i);
byte[] data = PdfReader.getStreamBytes(stream);
stream.setData(new String(data).replace("NULA", "Nulo").getBytes());
}
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
stamper.close();
reader.close();
}
}
原文由 Carlos Rosas 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
你可以用 iText 做到这一点。我用下面的代码测试了它。它在现有 PDF 的每一页上添加一大块文本和一个红色圆圈。