徒手下载谷歌图书(google books)

以前有一个google books downloader程序,据说好用,到我用时已经用不了,看到一本好书,能看却下不了,难免有一些失望。自己捣鼓了半天,用了一个比较傻的办法把书本给下载了。网上看到有很多人在找这个解决办法,把过程稍微记录一下吧
在这里插入图片描述
首先,用chrome分析了一下,书本的内容是以图片的形式动态加载的,随着翻页,动态的生成缓存内容。所以,只要把缓存的内容保存为图片文件,然后再将这些图片合并为pdf即可

1.清理chrome的缓存文件,避免和其他网站的缓存冲突,这期间不要用浏览器再访问别的网站。
2.打开谷歌图书相应的书本地址,按顺序翻页,这样缓存能按照顺序生成,方便后面合并成pdf。页数多的时候,可以用按键精灵一类的代替,否则这过程挺无聊的
3.翻页结束后,查看生成的缓存内容
在这里插入图片描述
3.将缓存文件拷贝出来到一个新建目录,例如f:\books,将缓存文件重新命名

在这里插入图片描述
4.以缩略图的形式查看,剔除无关的图片,确保下载无误,图片生成顺序正确。个人认为大致无误即可,要想完全正确,还是比较耗时间,没这个必要。图片的质量一般,有余力的人可以做一些图像清晰的批处理。

在这里插入图片描述
5.利用FreePic2Pdf工具,选择合适的排序顺序,生成pdf。如果顺序不合适,可以自己想办法将文件按照文件的生成时间排序,再按照序号去命名。这个比较简单,就不啰嗦了。
在这里插入图片描述
在这里插入图片描述
看页数好像比实际的页数要多,大致顺序没问题,就这样吧。写到这里,其实整个过程还是借用了FreePic2Pdf工具。不过其实有了图片,顺序也正确,整本书已经能够在本地正常阅读了,姑且还是算徒手吧。

Java GUI(图形用户界面)可以使用Java Swing库进行开发,绘画可以使用Java Graphics2D类。下面是一个简单的Java GUI程序,该程序提供了一个绘画区和一些工具,可以选择画笔颜色和笔刷大小,还有橡皮擦工具。 ```java import java.awt.*; import java.awt.event.*; import javax.swing.*; public class DrawingApp extends JFrame { private JPanel canvas; private JComboBox<String> colorChooser; private JComboBox<Integer> sizeChooser; private JToggleButton eraseButton; private Color currentColor = Color.black; private int currentSize = 5; public static void main(String[] args) { DrawingApp app = new DrawingApp(); app.setVisible(true); } public DrawingApp() { setTitle("Drawing App"); setSize(800, 600); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // create canvas panel and add to frame canvas = new JPanel(); canvas.setBackground(Color.white); canvas.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { Graphics2D g = (Graphics2D) canvas.getGraphics(); g.setColor(currentColor); if (eraseButton.isSelected()) { g.setColor(canvas.getBackground()); } g.setStroke(new BasicStroke(currentSize, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); g.drawLine(e.getX(), e.getY(), e.getX(), e.getY()); } }); canvas.addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(MouseEvent e) { Graphics2D g = (Graphics2D) canvas.getGraphics(); g.setColor(currentColor); if (eraseButton.isSelected()) { g.setColor(canvas.getBackground()); } g.setStroke(new BasicStroke(currentSize, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); g.drawLine(e.getX(), e.getY(), e.getX(), e.getY()); } }); add(canvas, BorderLayout.CENTER); // create tool panel and add to frame JPanel toolPanel = new JPanel(); add(toolPanel, BorderLayout.NORTH); colorChooser = new JComboBox<String>(new String[] {"Black", "Red", "Green", "Blue"}); colorChooser.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String color = (String) colorChooser.getSelectedItem(); switch (color) { case "Black": currentColor = Color.black; break; case "Red": currentColor = Color.red; break; case "Green": currentColor = Color.green; break; case "Blue": currentColor = Color.blue; break; } } }); toolPanel.add(new JLabel("Color:")); toolPanel.add(colorChooser); sizeChooser = new JComboBox<Integer>(new Integer[] {1, 3, 5, 10}); sizeChooser.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { currentSize = (Integer) sizeChooser.getSelectedItem(); } }); toolPanel.add(new JLabel("Size:")); toolPanel.add(sizeChooser); eraseButton = new JToggleButton("Eraser"); toolPanel.add(eraseButton); } } ``` 该程序创建了一个JFrame窗口,并在其中添加了一个绘画区(JPanel)和一个工具区(JPanel)。绘画区使用MouseListener和MouseMotionListener监听鼠标事件,并使用Graphics2D类绘制图形。工具区提供了选择颜色、笔刷大小和橡皮擦工具的选项。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值