gpt4 book ai didi

java - 从 pdf 内的 html 文本 block 访问内部 PDF 链接

转载 作者:行者123 更新时间:2023-12-02 09:14:59 27 4
gpt4 key购买 nike

我正在使用 itext 5。我有一个带有 HTML 样式的字符串和一个转到 pdf 中第 2 章的链接。

String text = "<p><strong>Jack </strong>and <strong>Jill </strong>went up the hill, then down the hill, around the hill then to <a href="Chapter 2">Chater 2</a>.</p>";

我正在使用 HTMLWorker 将 html 解析为字符串,并使用带有 localGoto 的 block 设置第 2 章的本地目标。

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.StringReader;

import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.html.simpleparser.HTMLWorker;
import com.itextpdf.text.pdf.PdfWriter;

public class InternalLinkExample {

public static void main(String[] args) {

Document document = new Document();

try {

PdfWriter.getInstance(document, new FileOutputStream("InternalLink.pdf"));

String text = "<p><strong>Jack </strong>and <strong>Jill </strong>went up the hill, then down the hill, around the hill then to <a href=#\"Chapter2\">Chater 2</a>.</p>";

document.open();

HTMLWorker htmlWorker = new HTMLWorker(document);
try {
htmlWorker.parse(new StringReader(text));
} catch (IOException e) {
throw new RuntimeException(e);
}

document.newPage();

Chunk chunk = new Chunk("Chapter 2 Jack");
chunk.setLocalDestination("Chapter2");
document.add(chunk);

document.close();
} catch (DocumentException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}

}
}

当我使用 iText 生成带有给定字符串的 pdf 并在 adobe PDF 查看器中打开 PDF 内部链接时,它会抛出安全警告并且无法打开。但是,当我使用谷歌浏览器打开 pdf 时,我可以访问链接。

我想使用 adobe pdf 查看器访问内部链接。所以请让我知道如何从 Html 字符串访问内部链接。另外,我正在升级到 Itext 7,如果该解决方案适用于 Itext 7,将会很有帮助。

最佳答案

iText 7 中的代码看起来与 iText 5 中的代码非常相似。确保哈希符号 ( # ) 包含在 href 中。属性值(双引号内),即 <a href="#Chapter2">

以下是如何在 iText 7 中生成指向 anchor 的链接的完整代码。生成的文档中的链接在 Acrobat 中工作正常。

PdfDocument pdfDocument = new PdfDocument(new PdfWriter("C:/path/to.pdf"));
Document document = new Document(pdfDocument);

String text = "<p><strong>Jack </strong>and <strong>Jill </strong>went up the hill, then down the hill, around the hill then to <a href=\"#Chapter2\">Chapter 2</a>.</p>";

List<IElement> elements = HtmlConverter.convertToElements(text);

for (IElement element : elements) {
if (element instanceof IBlockElement) {
document.add((IBlockElement) element);
}
}

document.add(new AreaBreak());

Text chapterTitle = new Text("Chapter 2 Jack").setDestination("Chapter2");
document.add(new Paragraph(chapterTitle));

document.close();

关于java - 从 pdf 内的 html 文本 block 访问内部 PDF 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59069484/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com