查看: 3168|回复: 11
打印 上一主题 下一主题

[讨论] 【记录贴】可下载两本书的 mdx 毛坯版 pdf转mdx--最省力[?]方法

[复制链接]
  • TA的每日心情
    开心
    2019-8-21 08:44
  • 签到天数: 163 天

    [LV.7]常住居民III

    17

    主题

    393

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    14980
    跳转到指定楼层
    1
    发表于 2018-12-22 11:03:45 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 mikeee 于 2019-1-2 11:59 编辑

    Pdf文件
    工具:Abbyy Finereader +  html 解析工具(主要用到 css selector或 xpath,此帖将使用 python3 的 pyquery)

    其他信息:曾有网友发帖问起有没可能将此书做成 mdx [https://www.pdawiki.com/forum/fo ... light=word%2Borigin]。我用 Abbyy Finereader 网页版做了10 页的测试,证实可行。

    后来没了下文。假期临近,我来学习这个帖 [https://www.pdawiki.com/forum/fo ... &tid=29288&ctid=352] 记录一下将两本书转成两列文本及 mdx 的过程。希望能帮助其他网友在将 pdf 转为 mdx 时节省一点时间。如有不当之处也请各路高人不吝指点。

    难点:Pdf 转 mdx 的关键一步是将pdf文件里的文字转化成做 mdx 所需要的格式(词头和内容(释义))。最简单的格式就是两列,见过pdawiki有工具将两列xls转成 mdx。当然,要做成漂亮的 mdx 则需要折腾 css、javascript,这些不在此帖的范围。 一般情况下要将 pdf 文件里文字的词头和内容分离都会比较麻烦。如果有规则可循,则可以用上正则什么的。而此书尽管文本是可以直接拷出来的,但每页有页头(如 Ballad of Typhoid Mary 55)和字母(如L)的信息,要用正则处理到也不是不可能,不过肯定要折腾一番。最麻烦的地方可能是出来的文本段落信息没有了,pdf 文件里的每一行都是一段。结论,要pdf里的文字一次性拷出来整理成两列会非常麻烦。如果原pdf文件是扫描的,拷文字的办法自然也是不可以的。而此帖的办法则可以用于扫描pdf文件——尽管没有亲测过,可能有不少坑。有时间或许也会试试。

    基本思想:用 Abbyy Fineread 将 pdf 转换成 docx, 再将 docx 转换成 html。再用 python包 pyqery分离词头和内容。(这一步也可用其他办法,比如 node的jquery或cheerio。python 里应该也是可以用 bs4 解析html,喜欢 xpath 的也可以用 lxml)。将 docx 转换成 html的另一个好处是:页头消失了。如果不想用程序解析 html,也可以用浏览器打开 html文件,拷出文本做进一步处理。

    步骤一览
    • Pdf 转 docx
    • Docx 转 html
    • 解析 html
    其实[https://www.pdawiki.com/forum/fo ... light=word%2Borigin] 的9楼已经给出了步骤及 Python 源码。

    第三步最简单的解析方法就是用浏览器打开 html 文件拷出文本再用自己喜欢的方法将词头和内容分离。本帖将利用 python 的 pyquery包非常快捷省力地分离词头和内容。

    详细步骤, 重点在第三步上,但第一、二步好像也有坑。

    A Dictionary of Confusable Phrases.pdf转Mdx
    • Finereader设置:完全识别、检测页首、只识别英文、


    果然有坑,全书 405 页,进行到四十几页时系统说内存不足。杀掉所有程序再试。因为知道pdf文件含文本,将“完全识别”改成“快速识别”,可以以节省内存——识别成功。
    memo to self:第一、二步好像可以合成一步,Finereader里可直接存为 html,但是否可以用 css selector分离则有待测试。 试了,词头的html tag为
    1. <span class="font6" style="font-weight:bold;">a la guerre comme a la guerre • c'est la guerre</span>
    复制代码
    在一个群里问到, 可用 css selector
    1. span[class="font6"][style^="font-weight"]
    复制代码
    定位词头。以后再回来折腾这个。其实可以直接用 css selcetor: span[class="font6"][style="font-weight:bold;"] 或 span.font6[style="font-weight:bold;"]
    memo to self: 先转成 docx 在处理纯英语文件时有个好处,可以利用Office Word的 spellchecker,而且Finereader不确定的地方会以颜色显示,有利于对格式、字体等的初步校核。格式和字体对css selector有影响。因此:分两步(pdf到docx,再docx到html)的做法是对的,第一、二步好像可以合成一步的做法不会再用了

    继续,用 Office 打开 docx,存为 html。用Chrome打开 htm 文件。右击页面选 Inspect (或Ctl-Shift-I)调出 Devtools。选定Element标签。在html页面里寻找粗体词头(比如第一个词头 a la guerre comme a la guerre • c'est la guerre)。

    memo to self: OCR前可先切掉pdf文件的首尾。或用 Office 处理 docx 文件或用 BlueGriffon(或其他html编辑器)处理 html文件删去无用的东西,后面分析 css selector时可以省去一些麻烦。

    折腾一阵后可以知道词头的 css selector 是
    1. .Bodytext30
    复制代码
    而释义部分的 css selector 是
    1. .Bodytext0
    复制代码
    可以在Devtools里的 Elements标签里按 Ctl-F 后键入 .Bodytext30 或 .Bodytext0 验证:点击下箭头(Search Next),html 对应的元素被高亮。对应的序号会被显示出来。


    .Bodytext30 共选出 3970个元素,第一个词头(a la guerre comme a la guerre • c'est la guerre)是第53个,最后一个词头(zero hour zero time)是第 3969个,因此词头的个数应该是 3917 。用pdf阅读器打开pdf文件,可以看到从第10页到339为正文,共330页, 合每页约12条大致差不多。其实这本书里的每一个词头都是一对,且含•。因此直接从pdf导出txt文本数一下•的个数就知道有多少条词目:3969 -- 和3917并不吻合。所以还要看看究竟是 .Bodytext30 漏了条目还是 • 出现在不是词头的地方。先搁置一下。(不吻合的原因是有些词头带两个•,有些释义里也用到•。)处理了一下后可以确定条目数为 3966。仔细看了一下html,发现Fineread OCR识别时错误地将几个词头整成了释义。html 错了 css selector 自然也就找不到词头,所以,OCR后先得检查 html 文件。
    memo to self:OCR完了后应对照 pdf 检查 docx 或 html 文件。



      前面讲过,由于《A Dictionary of Confusable Phrases》这本书的词头含 •(如 abandon ship • give up the ship)而且是自成一行,所有第三步无需折腾css selector而只需用简单的正则。只要通过浏览器从 html 文件拷出 txt, 再用正则将 词头和释义分离。附上第一、二步得到的 html 文件以及通过浏览器从 html文件拷出的 txt。【附件: html-txt-A Dictionary of Confusable Phrases.rar】

      附件里的 txt可用支持正则的文本编辑器(如vscode,notepad++, emeditor、editpad、vim、emacs)用以下正则分离词头和释义:
      1. \n([^•\n]*?)(\s*•\s*)([^\n]*)([\s\S]*?)(?=\n[^•\n]*•)
      复制代码
      (不想用环视的话好像搞不定……求坛里高人赐招。)前三个括号(即 \1 \2 \3)匹配词头; 第四个括号(\4)匹配释义。最后一个括号是环视零宽匹配。但因为有些释义里用到•,用正则的话必须对这些做特别处理。又一次显露了正则的局限性。



      用正则分离出来的 词头(共3966条)放在附件里(附件 hw-via-regex.txt

      到这一步有了这个txt文件要做成 mdx其实已经不用费太大功夫了。如在文本编辑器里折腾的话,根据 MdxBuilder 的要求利用\1 \2 \3 \4就可以生成MdxBuilder所需要的文件,进而用MdxBuilder生成mdx。



    • 从[A Dictionary of Confusable Phrases.htm](见附件)抽取词头 via python3 的 pyquery包
      我们上面看到Devtools里用 .Bodytext30 选出的词头数和用正办法则得到不一样。我们需要检查Finereader OCR得到的 docx文件。但单靠肉眼检查是非常费力而又不可靠的方法。我们要做的是用python程序抽取词头,然后用比较软件对比 python 程序得到的词头和用正则得到的词头。二者不同的地方就是可能出现问题的地方。

      来到了此帖的核心:pyquery,先上程序
      1. '''
      2. For Python3, not tested for Python2

      3. extract headerwords from
      4. A Dictionary of Confusable Phrases-trimmed.htm
      5. '''
      6. from pathlib import Path
      7. from pyquery import PyQuery as pq

      8. file = r'A Dictionary of Confusable Phrases-trimmed.html'
      9. file = r'A Dictionary of Confusable Phrases.htm'

      10. assert Path(file).exists(), f'[{file}] does not exist'

      11. encoding = 'utf8'
      12. try:
      13.     with open(file, 'rt', encoding=encoding) as fp:
      14.     file_cont = fp.readlines()
      15. except Exception as exc:
      16.     print(exc, 'trying with 18030')
      17.     encoding = 'gb18030'
      18.     try:
      19.         with open(file, 'rt', encoding=encoding) as fp:
      20.         file_cont = fp.read()
      21.     except Exception as exc:
      22.         print(exc)
      23.         raise SystemExit(f'Unable to read file [{file}] in utf8 nor gb18030, exiting')

      24. # file content in file_cont, start to parse
      25. css_header = '.Bodytext30'

      26. doc = pq(file_cont)
      27. headers = doc(css_header)

      28. with open('hw-via-pyquery.html', 'w', encoding=encoding) as fhandle:
      29.     fhandle.write(str(headers))
      复制代码
      贴上去的码缩进全没有了。手动缩进很辛苦。源码也上载在附件里。(稍微改了一下,直接输出词头txt文件,见附件 html_to_hw_rev.rar)

      程序读进[A Dictionary of Confusable Phrases.htm](见附件),然后利用前面得到的 css selector (.Bodytext30) 抽取词头,再写进文件[hw-via-pyquery.html]. 用浏览器打开[hw-via-pyquery.html]大致这个样子:



      在浏览器里ctl-a ctl-c 拷出 txt, 拷进文本编辑, 删掉空行(搜 \r\n\r\n 替代成 \r\rn 或用你喜欢的办法)。存为 hw-via-pqquery.txt。
      再用比较软件打开 hw-via-regex.txt 和 hw-via-pqquery.txt。我用了 Beyand Compare. 这个样子:



      左边是 hw-via-regex, 右边是 hw-via-pyquery. 可以看出,hw-via-pyquery漏掉了一些词头。根据显示的信息打开 docx检查以后,就发现 finereader做OCR时在换页有时会出错。在docx里参考原pdf文件进行修改。用Office Word打开 docx 后,可以看到,词头都是 size 8 粗体,而释义则是size 7。

      Finereader将pdf转成 docx 再转成 htm 并不完美,近4000条例大约有30-40条要手动将词头的 .Bodytext0 修改成 .Bodytext30, 用到一条正则花了不少脑筋 (<p class=Bodytext[0][^>]*>((?!</p>).)*?•((?!</p>).)*?</p>) ,正则搜索htm文件里的 <p class=Bodytext0> ... </p> 含• 的地方,改成 Bodytext30。最终得到的词头见附件 hw-via-pyquery-rev.txt。

      下一步就是抽取对应的释义了。可以预计会有很多坑。貌似圣诞假完不成。

      好像还挺顺利。稍微折腾一下就可以知道,词头和释义分别在 .Body30 和 .Bodytext0、.Bodytext3 里。祭出python pyquery,贴源码缩进消失,不好整,就不贴源码了。源码见附件 html_to_hw_cont.rar。最后得到词头及释义的 txt 文本(附件 A Dictionary of Confusable Phrases edited1_hw_cont.rar),如下图

    • 到这里,要从 txt 做成 mdx 词典已经不是太费事了。当然,还需要校对、微调格式等等。

      折腾了一下午,mdx词典毛坯出来了,还有些问题,非ASCII码有乱码,索引还没整好。先放出来。附上python源码和 mdx词典。(附件 mdx_pdf-to-mdx.rar)及对应的 css 和 jpg (附件 demo_data.rar)。

      mdx的乱码已经修好。但内容仍需校对,不过已不属于本帖的范围。会找时间为mdx词典做个详细的索引,只需加几行码不是太难的事情。

      下面截止折腾 Word and Phrase Origin这本书。做法基本相同,过程的记录会简略一些。

      鉴于标题里“最省力”这个词可能有争议;), 后面加个问号吧。

    WORD AND PHRASE ORIGINS.pdf 转 Mdx

    • pdf至docx
      有了做上一本的经验,先将截取pdf正文(删掉首尾的序言和索引)。Finereader OCR花了两个多小时。打开得到的 docx文件却发现每页页首的页面数目和标题没有被移除,网络版Finereader反而移除了页首的东西。还好后面的css selector可以排除页首的东西、
    • Docx至htm (见附件htm_to_txt_word-phrase-origin.rar里的 word-phrase-orgin.html)
    • Htm至(Mdxbuilder用的)Mdic_thtml: 几乎可以重现 htm 里的内容
      python 程序利用pyquery和 css selector 分离词头和释义 (见附件htm_to_txt_word-phrase-origin.rar里的html_to_hw_cont.py)
      得到的 txt 几乎重现了 pdf的内容 (见附件htm_to_txt_word-phrase-origin.rar里的 word_and_phrase_origin.txt)。这个样子:
      1. ……sold it to consumers, eliminating the middleman. Within 20 years the company be­came the first American grocery chain.

      2. [Aardsma.] The huge Baseball Encyclopedia lists pitcher David Aardsma, now of the Boston Red Sox, as first on the alphabeti­cal list of players who have played in the Major Leagues since 1876. Before Aardsma made the San Francisco Giants roster in 2004, home run king Hank Aaron topped the Encyclopedia list.

      3. [aardvark; aardwolf.] Both these animals dig in the earth for termites and ants, the former somewhat resembling a pig, the latter looking a little like a striped wolf. Thus the Boers in

      4. South Africa named them, respectively, the aardvark (from the Dutch aard, “earth,” plus vark, “pig”) or “earth pig,” and aard­wolf, or “earth wolf.”

      5. [Aaron lily; Aaron's beard; Aaron's rod; Aaron's serpent.] Numerous plants are named for the patriarch Aaron. Mention in the 133d Psalm of “the beard of Aaron” led to Aaron's beard becoming the common name……
      复制代码
      要生成 Mdx词典只要加几行码生成Mdithtml再导入 MdxBuilder 生成 Mdx文件就可以了。从近1000页的 pdf 文件到 Mdx 词典毛坯只需一个人几小时的时间!
    • 做成了 Mdx,没校对过。(附件 mdx_word-phrase-origin.rar)

    算是做完了两本书。结论:此法是可行的,但和用任何方法一样,最终还是需要人去一个一个字地检查及校对。大家如有什么建议、评论、问题,请跟帖,我尽量回答。开贴的四天以来我也学了不少东西,但愿此帖能对有些人有点用处或有所启发。(signing off boxing day 2018)
    2018-12-27 更新:有网友发现 https://www.pdftohtml.net/ 可以免费(无文件大小限制、无广告、无需注册——至少现在是这样)将pdf转成 html并且找到了基于css selector的方法分离两列(成功将Word and Phrase Origins 一书的 pdf 分拆成每页左右两个文件)。这样的话,贴里提到的第一、二步就可以合成一步在 https://www.pdftohtml.net/ 上完成。2019-01-02 更新:重读开篇里提到的贴 https://www.pdawiki.com/forum/forum.php?mod=viewthread&tid=29288&ctid=352,里面说的用软件a-pdf-pc将pdf一切二和用Adobe Acrobt去页眉和页脚的方法都可以简化从pdf到mdx的制作,可以一试。贴里还说可以用软件AnyBizSoft_PDF_Converter将pdf转成html,下次也要试试。此帖的第一、二步可用软件包括:Abbyy Finereader,迅捷,AnyBizSoft_PDF_Converter 以及 pdftohtml.net (貌似只能转英语)。

    html-to-txt-word-phrase-origin.jpg (296.88 KB, 下载次数: 0)

    html-to-txt-word-phrase-origin.jpg

    html-to-txt-word-phrase-origin.jpg (296.88 KB, 下载次数: 0)

    html-to-txt-word-phrase-origin.jpg

    html-txt-A Dictionary of Confusable Phrases.rar

    1.53 MB, 下载次数: 4, 下载积分: 米 -5 粒

    售价: 10 粒米  [记录]  [购买]

    html txt A Dictionary of Confusable Phrases

    hw-via-regex.txt

    162.01 KB, 下载次数: 3, 下载积分: 米 -5 粒

    词头3966条

    html_to_hw.rar

    557 Bytes, 下载次数: 3, 下载积分: 米 -5 粒

    html_to_hw.py

    html_to_hw_rev.rar

    1.74 KB, 下载次数: 2, 下载积分: 米 -5 粒

    html_to_hw.py 修改版

    hw-via-pyquery-rev.txt

    151.57 KB, 下载次数: 3, 下载积分: 米 -5 粒

    词头viapyquery 修改版

    html_to_hw_cont.rar

    827 Bytes, 下载次数: 3, 下载积分: 米 -5 粒

    html_to_hw_cont.py

    A Dictionary of Confusable Phrases edited1_hw_cont.rar

    653.66 KB, 下载次数: 1, 下载积分: 米 -5 粒

    hw-cont confusable dict txt

    mdx_pdf-to-mdx.rar

    1.7 MB, 下载次数: 2, 下载积分: 米 -5 粒

    html to mdicthtml py mdx

    demo_data.rar

    66.55 KB, 下载次数: 1, 下载积分: 米 -5 粒

    css jpg for MdxBuilder

    htm_to_txt_word-phrase-origin.rar

    3.64 MB, 下载次数: 3, 下载积分: 米 -5 粒

    mdx_word-phrase-origins.rar

    2.55 MB, 下载次数: 8, 下载积分: 米 -5 粒

    评分

    3

    查看全部评分

    本帖被以下淘专辑推荐:

  • TA的每日心情
    开心
    2018-1-29 01:48
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    12

    主题

    497

    回帖

    3万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    37070

    翰林院专用章灌水大神章笑傲江湖章小蜜蜂章管理组专用章

    推荐
    发表于 2018-12-26 00:47:54 | 只看该作者
    看你很认真,我就来随便扯几句
    为什么会有 PDF 这种格式?那是因为有大量的纸质资料,需要在电子设备上阅读。PDF 格式除了能大屏竖放的 ipad, kindle 还算舒服,  其他设备通通看着很难受。这是一种为了利用纸质设资料而提供的一种不得已的方法。
    HTML 格式才是真正能跨设备的电子格式。
    真得不需要关心任何技术,仅仅凭现状和逻辑,就可以得出结论,目前不可能存在省力的,简单的,通用的转换成真正能用的 HTML 的方法。如果有,那 PDF 这种反人类格式就不应该存在,至少不应该广泛存在。
    你现在转这个,其实已经算很简单的 PDF。不出所料,需要有大量的完全不通用的代码辅助,真正做到能用,可用,应该还有巨量的人肉操作。
    那种查几个单词就会有肉眼可见的错误的,我认为是完全不能用的,如果出来是这样的质量,我建议还是放手吧,花这么大精力根本不值得。


    如果你愿意继续,我有点小 tips 看看是否有帮助


    http://app.xunjiepdf.com/
    国产的,可以 PDF 转 HTML,这个思路以及算法和 word 以及你用的 abbyy 完全不同的,格式远远比那两个精准的多。


    通常处理这种需要反复改来改去的 HTML,我会先用 chrome snippets





    这里可以码大量的代码,你想码多长都可以。当然从代码是可以访问当前网页的,怎么改都可以。所见即所得,调试断点之类的那是当然也有的。
    除了网页不能过大,我是想不出有比这里更好,更方便用代码处理网页的地方了。

    评分

    1

    查看全部评分

  • TA的每日心情
    奋斗
    2019-1-7 09:42
  • 签到天数: 19 天

    [LV.4]偶尔看看III

    0

    主题

    79

    回帖

    769

    积分

    禁止发言

    积分
    769
    推荐
    发表于 2018-12-22 13:09:33 | 只看该作者
    一定是很牛的,虽然我看不懂
  • TA的每日心情
    奋斗
    2022-10-31 03:46
  • 签到天数: 224 天

    [LV.7]常住居民III

    3

    主题

    311

    回帖

    1817

    积分

    解元

    Rank: 5Rank: 5

    积分
    1817
    3
    发表于 2018-12-22 12:36:58 | 只看该作者
    挺不错的,谢谢分享哈
  • TA的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    250

    主题

    2966

    回帖

    53万

    积分

    状元

    吃水不忘挖井人

    Rank: 9Rank: 9Rank: 9

    积分
    531111

    灌水大神章笑傲江湖章推广专家QQ 章

    5
    发表于 2018-12-22 14:47:59 | 只看该作者
    感谢分享,到时候试试。
  • TA的每日心情
    奋斗
    2019-11-16 20:51
  • 签到天数: 178 天

    [LV.7]常住居民III

    7

    主题

    714

    回帖

    3887

    积分

    禁止发言

    积分
    3887

    灌水大神章笑傲江湖章QQ 章

    6
    发表于 2018-12-22 18:20:53 | 只看该作者
    非常感謝!正需要這樣的教程,學習學習自己製作詞典!
  • TA的每日心情
    开心
    2022-5-28 06:17
  • 签到天数: 277 天

    [LV.8]以坛为家I

    0

    主题

    593

    回帖

    1957

    积分

    解元

    Rank: 5Rank: 5

    积分
    1957

    笑傲江湖章灌水大神章

    7
    发表于 2018-12-22 21:06:40 | 只看该作者
    Although I do not understand this very much, I'll keep checking it out.
  • TA的每日心情
    奋斗
    2021-11-24 12:18
  • 签到天数: 487 天

    [LV.9]以坛为家II

    0

    主题

    741

    回帖

    5116

    积分

    会元

    Rank: 7Rank: 7Rank: 7

    积分
    5116
    8
    发表于 2018-12-25 21:07:24 | 只看该作者
    这个技术厉害了
  • TA的每日心情
    开心
    2023-3-1 12:06
  • 签到天数: 210 天

    [LV.7]常住居民III

    12

    主题

    317

    回帖

    4万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    49233

    笑傲江湖章灌水大神章

    9
    发表于 2018-12-25 23:43:17 | 只看该作者
    thank you so much for sharing such a valuable information
  • TA的每日心情
    开心
    2019-8-21 08:44
  • 签到天数: 163 天

    [LV.7]常住居民III

    17

    主题

    393

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    14980
    11
     楼主| 发表于 2018-12-26 11:17:02 | 只看该作者
    本帖最后由 mikeee 于 2018-12-26 14:15 编辑
    fearfare090807 发表于 2018-12-26 00:47
    看你很认真,我就来随便扯几句
    为什么会有 PDF 这种格式?那是因为有大量的纸质资料,需要在电子设备上阅读 ...

    感谢你的评论和tips。

    我试了一下迅捷,效果不错,但在原 pdf 文件是两列时并不适合我用的方法——迅捷OCR得到的两列是混在一起的。只要高亮一些内容就可以知道。两列混合就没办法用程序的方法分离。以后碰到 pdf 是一列时再来试试迅捷。又试了一下,迅捷8里设成编辑优先可以得到我所要的那种。但迅捷好像没法去掉页码和每页页首的标题,会在抽取词头和释义带来很大的麻烦。Finereader 的可取之处在于OCR可设置成去掉每页页首和页末的东西。如果能找到办法系统地移除pdf每页的header和footer再用迅捷就不错了。搜了一下,Mac里的Pdf Preview好像可以。Windows里面好像要装Adobe 啥的。

    另外我已经在标题的“最省力”后加了个问号。不过我觉得吧,OCR得到的内容的校对是任何技术手段都无法解决的。我的贴只是讨论如何将OCR得到的东西比较快捷地换成可以易于制作mdx的格式。内容校对还是得靠眼睛和大脑。
  • TA的每日心情
    开心
    2018-8-8 03:13
  • 签到天数: 1 天

    [LV.1]初来乍到

    254

    主题

    4264

    回帖

    7万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    79050

    小蜜蜂章笑傲江湖章灌水大神章QQ 章

    QQ
    12
    发表于 2018-12-28 14:58:02 | 只看该作者
    本帖最后由 喬治兄 于 2018-12-28 16:22 编辑
    fearfare090807 发表于 2018-12-26 00:47
    看你很认真,我就来随便扯几句
    为什么会有 PDF 这种格式?那是因为有大量的纸质资料,需要在电子设备上阅读 ...


    fearfare090807 兄:
    剛剛試了一頁效果好像沒有aabby好耶
    那公司的qq服務號感覺像機器人