如何将使用 Type 3 Font 编写的文本从一个 pdf 移动到另一个 pdf?
Posted
技术标签:
【中文标题】如何将使用 Type 3 Font 编写的文本从一个 pdf 移动到另一个 pdf?【英文标题】:How to move text written in Type 3 Font from one pdf to other pdf? 【发布时间】:2014-04-24 06:17:34 【问题描述】:我有一个 pdf,其中包含用 Type 3 字体编写的文本。
我想从中获取一些文本并以完全相同的形状将其写入其他 pdf。
我正在使用 itext。请给我一个提示。
编辑:我附上了我的代码。
DocumentFont f = renderInfo.getFont();
String str = renderInfo.getText();
x = renderInfo.getBaseline().getStartPoint().get(Vector.I1);
在这段代码中,我想将 str 写入 x 值位置。 在 Type 3 字体中,它可以工作吗?
【问题讨论】:
您希望将文档 A 中的一部分页面(包含 Type 3 字体字形)原样复制到文档 B,还是希望内容发生一些重新排列? 我想要重新排列以 Type 3 字体编写的内容。我尝试了 RenderListener.renderText,但 renderInfo.getFont()、getBaseline() 得到了奇怪的值。我不知道下一步。 @mkl 我更新了问题,你能指导我吗? 我想要重排内容 - 这可能会很困难。您能否提供具有此类 Type 3 字体文本的代表性示例文档,并指出如何选择要复制的字形? @mkl 我想把dl.dropboxusercontent.com/u/5872993/from.pdf 变成dl.dropboxusercontent.com/u/5872993/to.pdf 【参考方案1】:您可以使用以下代码将一页的部分内容复制到新页面:
InputStream resourceStream = getClass().getResourceAsStream("from.pdf");
PdfReader reader = new PdfReader(new FileOutputStream("from.pdf"));
Rectangle pagesize = reader.getPageSizeWithRotation(1);
Document document = new Document(pagesize);
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("areaOfFrom.pdf"));
document.open();
PdfContentByte content = writer.getDirectContent();
PdfImportedPage page = writer.getImportedPage(reader, 1);
content.saveState();
content.rectangle(0, 350, 360, 475);
content.clip();
content.newPath();
content.addTemplate(page, 0, 0);
content.restoreState();
document.close();
reader.close();
这会让你的
进入
不幸的是,隐藏的内容只是......隐藏......但它仍然存在。您可以特别标记带有隐藏文本的行并尝试复制和粘贴它们。
如果您想完全删除该隐藏文本(或仅从复制所需文本开始),您必须检查导入页面的内容并对其进行过滤。恐怕 iText 还没有明确支持这样的东西。可以使用 iText 低级 API 来完成,但工作量很大。
【讨论】:
以上是关于如何将使用 Type 3 Font 编写的文本从一个 pdf 移动到另一个 pdf?的主要内容,如果未能解决你的问题,请参考以下文章
单击按钮时如何将文本视图从一件事切换到另一件事 - Android
如何在 React JS 中使用三元运算符将 Font Awesome Icons 与文本一起使用?