通过java压缩带有大图像的pdf

寻找一种压缩PDF格式的图像并输出pdf进行存档的方法。 我无法在创建之前压缩图像,因为它会影响打印质量。 每个pdf的大小约为8MB,其中大部分由2个图像组成。 图像采用png格式,并在生成期间生成pdf(使用第三方生成器) 有没有办法在不使用第三方工具的情况下在java中压缩这些。 我试过pdfbox,itext和第三方exe(neevia),第三方工具是迄今为止给我任何结果的唯一一个(下降到大约半MB)但我不想放弃对exe的控制。 示例代码如下。 import java.io.BufferedReader; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Arrays; import org.apache.pdfbox.exceptions.COSVisitorException; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.common.PDStream; import com.itextpdf.text.DocumentException; import com.itextpdf.text.pdf.PdfReader; import com.itextpdf.text.pdf.PdfStamper; import com.itextpdf.text.pdf.PdfWriter; public class compressPDF { public static void main (String[] args) throws IOException, DocumentException, COSVisitorException { /* * Using PDF Box */ PDDocument […]

Recursion vs For循环 – Factorials,Java

获得阶乘(循环与递归)的这两种方法中的哪一种更有效/更快? 如果那个可以改进,怎么样? 语言:Java private static long factrecur(int n) { if (n == 0) { return 1; } else { return n * factrecur(n-1); } } private static long factloop(int a) { long total = 1; for (int b=a;b>=1;b–) { total *= b; } return total; }

了解Android紧密循环/旋转暂停错误

我正在开发一款关于android的游戏,“Space RPG” – 目前只在大多数Galaxy S4和HTC Ones上看到这个错误。 这都是Java。 游戏将停止,当我尝试调试进程并暂停有问题的线程时,它将不会挂起,并且会发生旋转挂起错误。 线程转储让我看到它在一个特定的while循环中,它正在采取一个所需的“结束位置”并在不断增加的距离步骤向后迭代以找到“开始位置”。 这是事情变得烦人的地方。 我可以validation循环无法无限运行,即使条件是while(true),在我的break被调用之前它不可能运行超过200次迭代(这个断言由正在运行的代码备份)我试过的每一部电话)。 为了帮助我缓解这个问题,我在循环中添加了一个简单的递增变量,如果它超过1000,它会记录一些东西,所以我可以看到它DID运行了太多次,以防万一设置了一些变量严重或什么的。 当此计数器代码存在时,不会发生崩溃/挂起。 我也没有看到任何日志表明它跑了1000多次。 如果我删除此计数器,则每次播放5-10秒后都会发生挂起[其中while循环可能会运行10次,尽管有所不同]。 因此,我的问题是,到底是怎么回事? :P为什么这些较新的手机(但似乎没有旧款手机)在执行有效工作的循环中存在问题,并且在没有增量变量的情况下不会持续很长时间。 线程怎么可能在该循环中停止,以及如何使用额外的计数器变量来解决问题呢? 这项工作是在opengl渲染线程上完成的,如果这很重要的话。 我有关于大多数S4发生这种情况的报道,但至少有一个S4在那里没有发生。 我今天使用的那个正在发生。 这让我想知道它是否可能与特定的android,java,dalvik或手机上的其他东西有关,但遗憾的是我没有从S4工作的任何细节。 非常感谢任何有关此类内容的帮助,指导,想法或进一步阅读。 float vel = 1.0f; // final velocity is 1. We are working backwards to find out what the starting velocity will need to be. int i = 0; double xmath = Math.sin(rot* […]

传递接口和类重新加载之间的性能差异

人们一致认为使用接口比使用类更好。 我当然同意:接受ArrayList而不是List的库方法将是一个废话。 人们也一致认为,表现总是一致的。 在这里,我的基准测试有所不同。 接口和抽象类都有1到4个实现。 当使用两个以上的实现时,性能开始出现分歧。 我正在寻找这种行为的解释(以及错误共识的起源)。

我们可以在iPhone上运行Java应用程序吗?

我们可以用Java运行或开发适用于iPhone的应用吗? 其实我有点困惑…… 请耐心等待,看看这些链接并回答: – 链接1 链接2 链接3 这是一个公开讨论。 所有的想法都表示赞赏 谢谢你们。

Objects.isNull(…)/ Objects.nonNull(…)的用途

是什么目的 Objects.isNull(x) 如果我们可以简单地写 x == null ? 同样的 Objects.nonNull(…) 和 x != null

我可以强制生成JVM崩溃日志文件吗?

来自JVM崩溃的日志文件包含用于调试的各种有用信息,例如加载的共享库和完整的环境。 我可以强制JVM以编程方式生成其中一个; 通过执行崩溃它的代码或其他方式? 或者以另一种方式访问​​相同的信息?

接口如何包含在其签名或返回类型中引用接口的具体实现类型的方法?

假设我正在设计类似以下界面: public interface MyInterface{ public MyInterface method1(); public void method2(MyInterface mi); } 但是,需要注意的是, method1的返回类型和method2的参数与具体实现相匹配,而不仅仅是MyInterface 。 也就是说,如果我有实现MyInterface ,它需要具有以下内容: public class MyInterfaceImpl implements MyInterface{ @Override public MyInterfaceImpl method1(){…} @Override public void method2(MyInterfaceImpl mi){…} } 如上所述, method1不会导致任何编译错误,但没有任何保证返回类型在所有实现中都匹配。 当然, method2甚至不会编译,因为签名与接口不匹配。 一个候选解决方案是在generics中使用自引用或递归边界: public interface MyInterface<T extends MyInterface>{ public T method1(); public void method2(T mi); } public class MyInterfaceImpl implements MyInterface{ […]

复制构造函数和防御性复制

什么是复制构造函数 ? 有人可以分享一个小例子,有助于理解防御性复制原则吗?

Javascript的最佳源代码格式化程序?

我一直在挖掘Stack Overflow以及一些谷歌搜索,我找不到一个令人满意的Javascript代码格式化程序。 我找到了几个相关的工具,如语法高亮显示器和漂亮的打印机,但我正在寻找一个工具,我可以理想地在Eclipse中创建一个包装器,只需从菜单栏运行。 因此,如果有任何基于Java的可用,这是一个很大的优点。 自由和/或开源也是首选。 我正在寻找我的开发小组可以用来维护一致代码风格的东西。 谢谢。 [编辑]感谢您非常快速的回复! 如果我有任何业力,我会向你们投票。 但特别是kRON用于链接到格式自定义页面。 [编辑] Stack Overflow上的相关问题 。