V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
yuyue001
V2EX  ›  程序员

像这种网站前端是怎么实现的?看起来是 PDF,不能保存,也不能打印。

  •  
  •   yuyue001 · 2023-04-26 19:36:42 +08:00 · 4022 次点击
    这是一个创建于 611 天前的主题,其中的信息可能已经有所发展或是发生改变。

    通过 国家标准全文公开系统 查看文件,每次都要输入验证码。

    比如这个文件 标准号:GB/T 32960.2-2016。 我想保存到本地。

    这么实现不利于标准的传播啊。

    23 条回复    2024-05-16 14:47:55 +08:00
    aqqwiyth
        1
    aqqwiyth  
       2023-04-26 19:42:27 +08:00
    看看网络请求就知道 雪碧图 前端再拼接成可读的
    yuyue001
        2
    yuyue001  
    OP
       2023-04-26 19:47:12 +08:00
    @aqqwiyth 但是为什么不能打印保存成 PDF 格式?
    WindProtect
        3
    WindProtect  
       2023-04-26 19:47:56 +08:00
    看了下,是用 png 做背景图然后拼的。
    leedarmau
        4
    leedarmau  
       2023-04-26 19:48:27 +08:00
    /* Rules for browsers that support PDF.js printing */
    body[data-pdfjsprinting] #outerContainer {
    display: none;
    }
    body[data-pdfjsprinting] #printContainer {
    display: block;
    }
    #printContainer {
    height: 100%;
    }
    ewiglicht
        5
    ewiglicht  
       2023-04-26 19:48:39 +08:00
    看起来像是用 PDFJS 加密的,
    网络请求只能看到加密后的图片,想解密还是得分析 JS 或者看 PDFJS 文档吧
    http://c.gb688.cn/bzgk/gb/viewGbImg?fileName=Rxv5H%2B7w%2F9pStytcWHOjELhgi15P7t2pOM5E5s8n%2FNg%3D
    http://c.gb688.cn/bzgk/gb/viewGbImg?fileName=Rxv5H%2B7w%2F9pStytcWHOjEEpRZ6l4XqRKWt%2FN4ILnKeM%3D
    leedarmau
        6
    leedarmau  
       2023-04-26 19:49:07 +08:00
    感觉是他们禁用了打印时的样式,另外提供一套打印时的样式。但是不知什么原因没有显示,所以空白了。
    cuicuiv5
        7
    cuicuiv5  
       2023-04-26 19:49:56 +08:00
    @aqqwiyth 这是为了加密吗?
    charlieethan
        8
    charlieethan  
       2023-04-26 19:55:02 +08:00
    用 singlefile 插件照样保存为 HTML ,但保存后的文件非常大,例如 OP 贴出来的这个 GB/T 32960.2-2016 ,保存后文件高达 483M
    yuyue001
        9
    yuyue001  
    OP
       2023-04-26 19:55:09 +08:00
    @WindProtect @leedarmau @ewiglicht @cuicuiv5

    感觉没必要啊。
    国家标准,不就应该尽可能公开,尽可能方便大家阅读吗?
    chnwillliu
        10
    chnwillliu  
       2023-04-26 19:56:14 +08:00
    @media print {
    html, body {
    display: none;
    }
    }
    ck65
        11
    ck65  
       2023-04-26 19:57:47 +08:00
    yuyue001
        12
    yuyue001  
    OP
       2023-04-26 20:01:34 +08:00   ❤️ 1
    @ck65 谢谢
    googlefans
        13
    googlefans  
       2023-04-26 20:05:12 +08:00
    这些都不是都可以公开下载的吗
    lj2016
        14
    lj2016  
       2023-04-26 20:14:30 +08:00
    大部分标准都是收费的,国外的标准更是贵的要死。
    要么去正规出版社买纸质版,要么去学兔兔之类的网站下载电子版
    ASmartPig
        16
    ASmartPig  
       2023-04-26 23:16:41 +08:00
    可以另存为 mhtml 的单文件在本地打开
    yhxx
        17
    yhxx  
       2023-04-26 23:30:30 +08:00
    有没有可能他搞的这么大只是因为做这个的人在网上只找到了这个 PDF 插件来实现,并没有想那么多
    vace
        18
    vace  
       2023-04-26 23:30:45 +08:00   ❤️ 4
    1. 你为什么保存不了 PDF:
    因为这个页面设置了好几处 print style ,比如 `@media print html, body {display: none;}`,也就是打印时关闭所有输出,Chrome 的话你打开 Rendering ,设置 Emulate Css media type = print ,就能预览到打印样式,随手改改,就能打印了(注意还要勾选浏览器的打印选项:包含背景图片)

    2. 他们怎么做的:
    其实也挺简单,每一页划分成 m 乘 n 的固定块,然后再把这些块打乱输出一张图片,显示时用 html 的 background-position 对每一块进行定位,这一步写个脚本就能完成了。相应的,拿到 html 结构和图片,提取出 position ,你写个脚本也能复原图片。

    3. 为啥这么做:猜测的原因可能有: 防爬虫、付费卖文档、节约点点资源?(毕竟合并在一起压缩率更高,可以一次拿到很多页的数据,目前还过滤了纯白色块)
    yolee599
        19
    yolee599  
       2023-04-27 08:54:56 +08:00 via Android
    标准是要收钱的,网上能下的多数是盗版!
    c2const
        20
    c2const  
       2023-04-27 09:39:10 +08:00
    只是想保存到本地,保存到单个网页就行了,mhtml 格式,本地文件可以直接打开。
    qiaofanxing
        21
    qiaofanxing  
       2023-04-27 10:21:47 +08:00   ❤️ 2
    laLuna
        22
    laLuna  
       2023-04-27 16:58:56 +08:00 via iPhone
    大部分标准可以免费公开下载的,个别标准用到了国外的专利,不允许下载,只能买纸质的
    LYwyc2
        23
    LYwyc2  
       225 天前
    @qiaofanxing 万分感谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   983 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 22:57 · PVG 06:57 · LAX 14:57 · JFK 17:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.