找回密码
 快速注册
搜索
楼主: hbghlyj

以任意的页面大小打印网页

[复制链接]

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

abababa 发表于 2024-1-6 17:14
abababa 发表于 2024-1-6 15:55
就是用油猴的话,用下面的javascript

查了一下,发现一个叫sessionStorage的,可以解决跨页的问题,新的代码如下:
  1. // ==UserScript==
  2. // @name         New Userscript
  3. // @namespace    http://tampermonkey.net/
  4. // @require      https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.0/jquery.min.js
  5. // @version      0.1
  6. // @description  try to take over the world!
  7. // @author       You
  8. // @match        https://kuing.cjhb.site/*
  9. // @grant        none
  10. // ==/UserScript==
  11. (function() {
  12.         'use strict';
  13.         $(document).ready(function(){
  14.                 $('body').click(function(event){
  15.                         var pid = $(event.target);
  16.                         pid = $(pid).attr('id').replace('postmessage_','');
  17.                         if(sessionStorage.getItem(tid) == null) {
  18.                                 sessionStorage.setItem(tid, '');
  19.                         }
  20.                         var set_str = sessionStorage.getItem(tid);
  21.                         set_str += pid+',';
  22.                         sessionStorage.setItem(tid, set_str);
  23.                 });
  24.                 $('#hd').click(function() {
  25.                         var keys = Object.keys(sessionStorage);
  26.                         for(var i = 0; i < keys.length; i++) {
  27.                                 var set_str = sessionStorage.getItem(keys[i]);
  28.                                 var set_str_split = set_str.split(',');
  29.                                 var set = new Set();
  30.                                 for(var j = 0; j < set_str_split.length; j++) {
  31.                                         set.add(set_str_split[j]);
  32.                                 }
  33.                                 var arr = Array.from(set);
  34.                                 arr.sort();
  35.                                 console.log("tid="+tid+",pids="+arr);
  36.                         }
  37.                 });
  38.         });
  39. })();
复制代码


操作还是像之前一样,点每个需要的帖子里的不加装饰的文字,然后什么也不用管,可以点下一页继续点,然后换其它帖子再点……最后点一下最顶上的那个背景图,就输出所有需要的主题tid和下面的pid了。

730

主题

1万

回帖

9万

积分

积分
93613
QQ

显示全部楼层

kuing 发表于 2024-2-6 23:31
本帖最后由 kuing 于 2024-2-6 23:37 编辑
abababa 发表于 2024-1-6 17:14
查了一下,发现一个叫sessionStorage的,可以解决跨页的问题,新的代码如下:


反正都得一个个帖子去浏览,我还是决定在浏览时就保存为 PDF,最后将所有 PDF 按分类来合并好了。
所以我还是先用 11# 那种方式,将帖子分界线弄成打印按钮,经过一些改进之后已经实现点击哪条分界线就到印到那里,并且之后的楼层会在打印时隐藏。(相关代码已放入 zdy3pc.js 里)
然后我再自己写了一个油猴,用于简化页面和折叠楼层等,见 kuing.cjhb.site/forum.php?mod=viewthread&tid=11885&page=1#pid57642
这样在浏览时保存 PDF 已经比较方便了。

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2024-2-7 02:51
有没有可能,把所有帖子放在一個很長的網頁,打印?這樣就不會發生字體重複的問题。
分頁可以用CSS的page-break-after

点评

不现实,三百个帖子放一个长网页里,能不卡死吗?  发表于 2024-2-7 14:46

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2024-2-7 02:55
pdf_print_service.js第103行:
  1.     // Insert a @page + size rule to make sure that the page size is correctly
  2.     // set. Note that we assume that all pages have the same size, because
  3.     // variable-size pages are not supported yet (e.g. in Chrome & Firefox).
  4.     // TODO(robwu): Use named pages when size calculation bugs get resolved
  5.     // (e.g. https://crbug.com/355116) AND when support for named pages is
  6.     // added (http://www.w3.org/TR/css3-page/#using-named-pages).
  7.     // In browsers where @page + size is not supported, the next stylesheet
  8.     // will be ignored and the user has to select the correct paper size in
  9.     // the UI if wanted.
  10.     this.pageStyleSheet = document.createElement("style");
  11.     this.pageStyleSheet.textContent = `@page { size: ${width}pt ${height}pt;}`;
  12.     body.append(this.pageStyleSheet);
复制代码

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

abababa 发表于 2024-2-7 15:26
kuing 发表于 2024-2-6 23:31
反正都得一个个帖子去浏览,我还是决定在浏览时就保存为 PDF,最后将所有 PDF 按分类来合并好了。
所以我 ...

我的意思是平时几乎每天就浏览帖子,然后可以在帖子上做个按钮之类的,就像现在帖子底下有“评分”这样的按钮,能不能做一个“加入pdf”的按钮,只有版主能看到的。然后平时浏览时就把它点上,这样不就存到数据库里了吗,然后到出pdf的时候,直接从数据库里查点上的帖子,弄出来就行了,也不用赶在那一两天弄。
这只是个想法,具体的数据库什么的我也不会,只知道要用SQL语言弄。

730

主题

1万

回帖

9万

积分

积分
93613
QQ

显示全部楼层

kuing 发表于 2024-2-7 15:51
abababa 发表于 2024-2-7 15:26
我的意思是平时几乎每天就浏览帖子,然后可以在帖子上做个按钮之类的,就像现在帖子底下有“评分”这样的 ...

哦,也是挺好的想法。
SQL 啥的我也不太会啦。
不过靠平时点的话,我很可能会有漏点(对自己没啥信心😅

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2024-2-7 16:06
hbghlyj 发表于 2024-2-6 18:51
有没有可能,把所有帖子放在一個很長的網頁,打印?這樣就不會發生字體重複的問题。
分頁可以用CSS的page-b ...


Firefox的PDF瀏覽器PDF.JS打開後本身就是一個很長的網頁,它將PDF內容繪製在canvas上,點擊打印時是在执行那個PrintService.js
既然PDF瀏覽器能加載很長的PDF 並打印,我覺得也可以打印很長的網頁🤔

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2024-2-7 16:13


如果使用那些免費在線HTML to PDF轉換器,應該不難實現。每次點擊按鈕時向免費在線HTML to PDF轉換器發送請求,把轉換結果保存即可🙂

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

abababa 发表于 2024-2-7 16:41
hbghlyj 发表于 2024-2-7 16:13
如果使用那些免費在線HTML to PDF轉換器,應該不難實現。每次點擊按鈕時向免費在線HTML to PDF轉換器發送 ...


不是在线转换,你看我21楼的那个,我的本意就是平时在点击帖子时,就把那一串帖子的tid,pid什么的存到数据库里,只是怎么存到数据库里我不会,我只能做到先提取出来。
这样平时点完了,就把那个帖子存好了,然后做pdf文档时,可以从数据库里直接把那些文本读出来,导成tex格式,图片那种就用字符串替换,换成latex里导入图片的命令,最后编译tex就完成了。
因为每周、每月的新帖、新回复应该都有统计,所以只要每周或每月检查这些新的就行了,旧的在之前就应该已经点完了。

现在想一想,其实帖子只有打印和不打印两种,所以应该是做成一个单选框的形式最好,对应在数据库里应该是存0或1吧,最后把值是1的,在某个时间段的帖子找出来应该就行了。

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2024-2-7 19:04
本帖最后由 hbghlyj 于 2024-2-7 21:27 编辑
abababa 发表于 2024-2-7 08:41
不是在线转换,你看我21楼的那个,我的本意就是平时在点击帖子时,就把那一串帖子的tid,pid什么的存到数 ...


完全同意!因此我正在研究如何把本站的主字體Tahoma導入TeX
Winfonts – Use fonts distributed with Windows XP包含Tahoma
kuing.cjhb.site/forum.php?mod=viewthread&tid=11910#lastpost

手机版|悠闲数学娱乐论坛(第3版)

GMT+8, 2025-3-4 15:24

Powered by Discuz!

× 快速回复 返回顶部 返回列表