Css 使用Puppeter for PDF的动态目录

Css 使用Puppeter for PDF的动态目录,css,node.js,pdf,puppeteer,Css,Node.js,Pdf,Puppeteer,我一直在寻找解决办法,大多数答案都是不可能的。我已经看到Paged.js(考虑过使用它,但它似乎太大和不合目的)无法使用 a::在{content:target counter(attr(href),page,decimal);}之后 ,更改其中的内容,以便为ToC填写正确的页码。我猜这意味着他们已经在他们的库中创建了一个css polyfill来修复这个问题?浏览器似乎不支持目标计数器和::after。我不确定我在这里的想法是否正确——但我一直在寻找css polyfill,以使目标计数器也能

我一直在寻找解决办法,大多数答案都是不可能的。我已经看到Paged.js(考虑过使用它,但它似乎太大和不合目的)无法使用

a::在{content:target counter(attr(href),page,decimal);}之后

,更改其中的内容,以便为ToC填写正确的页码。我猜这意味着他们已经在他们的库中创建了一个css polyfill来修复这个问题?浏览器似乎不支持目标计数器和::after。我不确定我在这里的想法是否正确——但我一直在寻找css polyfill,以使目标计数器也能为我工作(以及:avoid之后的分页符),因为paged.js似乎就是这样做的

无论如何,我一直在考虑的第二个选择是使用PDF解析器解析PDF中的所有数据,并以某种方式使用正则表达式和循环以及其他一些黑客工具来查找我要查找的元素的页码。也许我会将解析器返回值放入一个JSON文件中,然后从目录或其他地方获取该JSON文件?听起来很慢,因为我还要再合并一次pdf。(已为frontpage执行了一次)


具体一点:我想知道这些解决方案中的一个或两个是否可行,如果可行,我希望在a.修复我需要的CSS标记的polyfill上找到一些指针,或者B.从pdf解析器排序和构造数据的想法/方法

对于选项B,下面的脚本对于任何感兴趣的人来说都是一个好的开始

const fs = require('fs');
const pdf = require('pdf-parse');
const { Readable } = require("stream");
let dataBuffer = fs.readFileSync('./generated.pdf');
pdf(dataBuffer).then(function(data) {
    let toc ={}, page;
    const pagePattern = /Page [0-9]+\/[0-9]+/;
    const topicPattern = /Title: [A-Za-z 0-9]+/;
    const lines = data.text.split('\n');
    lines.forEach((chunk, i, lines) => {
        if(chunk.match(pagePattern)) {
            page = chunk
        }
        if(chunk.match(topicPattern) && !toc[chunk]) {
            toc[chunk] = page
        }
    });
    console.log(toc); // Use this object to fill in values for your table of content
});

希望这将有助于某人。

对于选项B,下面的脚本将是对任何感兴趣的人的良好开端

const fs = require('fs');
const pdf = require('pdf-parse');
const { Readable } = require("stream");
let dataBuffer = fs.readFileSync('./generated.pdf');
pdf(dataBuffer).then(function(data) {
    let toc ={}, page;
    const pagePattern = /Page [0-9]+\/[0-9]+/;
    const topicPattern = /Title: [A-Za-z 0-9]+/;
    const lines = data.text.split('\n');
    lines.forEach((chunk, i, lines) => {
        if(chunk.match(pagePattern)) {
            page = chunk
        }
        if(chunk.match(topicPattern) && !toc[chunk]) {
            toc[chunk] = page
        }
    });
    console.log(toc); // Use this object to fill in values for your table of content
});
希望这将对其他人有所帮助。

如果有价值,请跟踪Puppeter的此功能请求。如果有价值,请跟踪Puppeter的此功能请求。