PdfRenderThread.java 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. package epson.print.service;
  2. import android.graphics.BitmapFactory;
  3. import android.support.annotation.NonNull;
  4. import com.epson.mobilephone.common.PrintingLib.define.Constants;
  5. import epson.common.ImageUtil;
  6. import epson.common.Info_paper;
  7. import epson.print.CommonDefine;
  8. import epson.print.EPImage;
  9. import epson.print.EPImageList;
  10. import epson.print.EPImageUtil;
  11. import epson.print.pdf.AreaPdfRenderer;
  12. import java.io.File;
  13. import java.io.IOException;
  14. import java.util.ArrayList;
  15. import java.util.concurrent.LinkedBlockingDeque;
  16. class PdfRenderThread extends Thread {
  17. private static final String TAG = "PdfRenderThread";
  18. private LinkedBlockingDeque<Integer> mDeque;
  19. private EPImageList mEpImageList;
  20. private boolean mIsLandscape;
  21. private final int mLayoutMulti;
  22. private String mOriginalFilename;
  23. private ArrayList<Integer> mPageList;
  24. private String mPassword;
  25. private String mPdfFilename;
  26. private AreaPdfRenderer mPdfRenderer;
  27. private int[] mPrintRange;
  28. private PrintService mPrintService;
  29. private int[] mPrintableArea;
  30. public PdfRenderThread(PrintService printService, AreaPdfRenderer areaPdfRenderer, String str, String str2, String str3, boolean z, LinkedBlockingDeque<Integer> linkedBlockingDeque, int[] iArr, int[] iArr2, int i) {
  31. super("pdf-rendering");
  32. if (printService == null || areaPdfRenderer == null || linkedBlockingDeque == null || iArr == null || iArr.length < 2) {
  33. throw new IllegalArgumentException();
  34. }
  35. this.mPrintService = printService;
  36. this.mDeque = linkedBlockingDeque;
  37. this.mPrintableArea = iArr;
  38. this.mPrintRange = iArr2;
  39. this.mPassword = str3;
  40. this.mIsLandscape = z;
  41. this.mPdfRenderer = areaPdfRenderer;
  42. this.mPdfFilename = str;
  43. this.mOriginalFilename = str2 != null ? str2 : str;
  44. this.mLayoutMulti = i;
  45. }
  46. public void createEpImageList() {
  47. String str = this.mPdfFilename;
  48. int[] iArr = this.mPrintRange;
  49. this.mPageList = new ArrayList<>();
  50. this.mEpImageList = new EPImageList();
  51. if (this.mPdfRenderer.openPdfFile(str, this.mPassword, this.mPrintService.getLocalApplicationContext())) {
  52. int i = 0;
  53. int i2 = (iArr == null || iArr.length < 1) ? 1 : iArr[0];
  54. int i3 = this.mPdfRenderer.totalPages();
  55. if (iArr != null && iArr.length >= 2) {
  56. i3 = iArr[1];
  57. }
  58. while (i2 <= i3) {
  59. this.mPageList.add(Integer.valueOf(i2));
  60. EPImage ePImage = new EPImage();
  61. ePImage.index = i;
  62. ePImage.loadImageFileName = getPdfDecodeFilename(i2).getPath();
  63. ePImage.setOrgName(this.mOriginalFilename);
  64. this.mEpImageList.add(ePImage);
  65. i2++;
  66. i++;
  67. }
  68. return;
  69. }
  70. throw new IllegalStateException();
  71. }
  72. /* access modifiers changed from: package-private */
  73. @VisibleForTesting
  74. public File getPdfDecodeFilename(int i) {
  75. return AreaPdfRenderer.getPdfDecodeFilename(this.mPrintService.getLocalApplicationContext(), i);
  76. }
  77. public EPImageList getImageList() {
  78. return this.mEpImageList;
  79. }
  80. public void run() {
  81. renderPdf();
  82. }
  83. /* access modifiers changed from: package-private */
  84. @VisibleForTesting
  85. public boolean renderPdf() {
  86. AreaPdfRenderer areaPdfRenderer = this.mPdfRenderer;
  87. if (areaPdfRenderer == null || this.mEpImageList == null || this.mDeque == null) {
  88. throw new IllegalStateException();
  89. }
  90. try {
  91. boolean isPageLandscape = areaPdfRenderer.isPageLandscape(1);
  92. boolean z = isPageLandscape == this.mIsLandscape;
  93. int[] limitAreaSize = getLimitAreaSize(this.mPrintableArea);
  94. for (int i = 0; i < this.mPageList.size(); i++) {
  95. int intValue = this.mPageList.get(i).intValue();
  96. if (this.mPrintService.getCancelPrinting()) {
  97. return false;
  98. }
  99. boolean isPageLandscape2 = this.mPdfRenderer.isPageLandscape(intValue);
  100. int[] portraitOrLandscapeSize = AreaPdfRenderer.getPortraitOrLandscapeSize(limitAreaSize, isPageLandscape2 != z);
  101. EPImage ePImage = this.mEpImageList.get(i);
  102. if (!this.mPdfRenderer.convertPageForPrint(ePImage.loadImageFileName, intValue, portraitOrLandscapeSize)) {
  103. return false;
  104. }
  105. if (isPageLandscape != isPageLandscape2) {
  106. epImageRotate(ePImage, getRotate(isPageLandscape));
  107. }
  108. int[] localGetImageSize = localGetImageSize(ePImage.loadImageFileName);
  109. setEPImage(ePImage, localGetImageSize, getPreviewAreaSize(this.mPrintableArea, z, localGetImageSize));
  110. this.mDeque.offerLast(Integer.valueOf(i));
  111. }
  112. return true;
  113. } catch (Exception unused) {
  114. return false;
  115. }
  116. }
  117. /* access modifiers changed from: package-private */
  118. @VisibleForTesting
  119. @NonNull
  120. public int[] getPreviewAreaSize(@NonNull int[] iArr, boolean z, @NonNull int[] iArr2) {
  121. boolean z2 = false;
  122. if ((iArr2[0] <= iArr2[1]) == z) {
  123. z2 = true;
  124. }
  125. return AreaPdfRenderer.getCircumscribedSize(iArr2, AreaPdfRenderer.getPortraitOrLandscapeSize(iArr, z2));
  126. }
  127. /* access modifiers changed from: package-private */
  128. @VisibleForTesting
  129. public int[] getLimitAreaSize(@NonNull int[] iArr) {
  130. int[] portraitOrLandscapeSize = AreaPdfRenderer.getPortraitOrLandscapeSize(iArr, true);
  131. int[] portraitOrLandscapeSize2 = AreaPdfRenderer.getPortraitOrLandscapeSize(getMaxAreaSize(), true);
  132. return new int[]{Math.min(portraitOrLandscapeSize[0], portraitOrLandscapeSize2[0]), Math.min(portraitOrLandscapeSize[1], portraitOrLandscapeSize2[1])};
  133. }
  134. /* access modifiers changed from: package-private */
  135. @VisibleForTesting
  136. public int[] getMaxAreaSize() {
  137. Info_paper infoPaper = Info_paper.getInfoPaper(this.mPrintService.getLocalApplicationContext(), Constants.PaperName.EPS_MSID_A3.getCode());
  138. return new int[]{infoPaper.getPaper_width_boder(), infoPaper.getPaper_height_boder()};
  139. }
  140. /* access modifiers changed from: package-private */
  141. @VisibleForTesting
  142. public void setEPImage(@NonNull EPImage ePImage, @NonNull int[] iArr, @NonNull int[] iArr2) {
  143. ePImage.srcWidth = iArr[0];
  144. ePImage.srcHeight = iArr[1];
  145. ePImage.isPaperLandScape = this.mIsLandscape;
  146. ePImage.previewPaperRectTop = 0;
  147. ePImage.previewPaperRectLeft = 0;
  148. ePImage.previewPaperRectRight = iArr2[0];
  149. ePImage.previewPaperRectBottom = iArr2[1];
  150. copyPreviewPaperRectToPreviewImageRect(ePImage);
  151. ePImage.previewWidth = (int) (ePImage.previewImageRectRight - ePImage.previewImageRectLeft);
  152. ePImage.previewHeight = (int) (ePImage.previewImageRectBottom - ePImage.previewImageRectTop);
  153. }
  154. private void copyPreviewPaperRectToPreviewImageRect(@NonNull EPImage ePImage) {
  155. ePImage.previewImageRectLeft = (float) ePImage.previewPaperRectLeft;
  156. ePImage.previewImageRectTop = (float) ePImage.previewPaperRectTop;
  157. ePImage.previewImageRectRight = (float) ePImage.previewPaperRectRight;
  158. ePImage.previewImageRectBottom = (float) ePImage.previewPaperRectBottom;
  159. }
  160. /* access modifiers changed from: package-private */
  161. @VisibleForTesting
  162. @NonNull
  163. public int[] localGetImageSize(@NonNull String str) {
  164. BitmapFactory.Options imageSize2 = ImageUtil.getImageSize2(str);
  165. return new int[]{imageSize2.outWidth, imageSize2.outHeight};
  166. }
  167. /* access modifiers changed from: package-private */
  168. @VisibleForTesting
  169. public int getRotate(boolean z) {
  170. if (this.mLayoutMulti != 65536) {
  171. if (z) {
  172. return EPImage.EPS_ROTATE_270;
  173. }
  174. return 90;
  175. } else if (!z) {
  176. return EPImage.EPS_ROTATE_270;
  177. } else {
  178. return 90;
  179. }
  180. }
  181. /* access modifiers changed from: package-private */
  182. @VisibleForTesting
  183. public void epImageRotate(@NonNull EPImage ePImage, int i) throws IOException {
  184. String str = ePImage.loadImageFileName;
  185. try {
  186. String rotateFilename = getRotateFilename(str);
  187. checkFileExists(rotateFilename);
  188. rotateImage(str, rotateFilename, i);
  189. ePImage.loadImageFileName = rotateFilename;
  190. } finally {
  191. deleteFile(str);
  192. }
  193. }
  194. /* access modifiers changed from: package-private */
  195. @VisibleForTesting
  196. public void rotateImage(@NonNull String str, @NonNull String str2, int i) throws IOException {
  197. EPImageUtil ePImageUtil = new EPImageUtil();
  198. String str3 = str + ".bmp";
  199. if (ePImageUtil.jpg2bmp(str, str3, 1) != 0) {
  200. throw new IOException();
  201. } else if (ePImageUtil.rotateImage(str3, str2, i) != 0) {
  202. throw new IOException();
  203. }
  204. }
  205. /* access modifiers changed from: package-private */
  206. @VisibleForTesting
  207. public void checkFileExists(String str) throws IOException {
  208. if (new File(str).exists()) {
  209. throw new IOException("rotate out file '" + str + "] exists");
  210. }
  211. }
  212. /* access modifiers changed from: package-private */
  213. @VisibleForTesting
  214. public void deleteFile(String str) throws IOException {
  215. new File(str).delete();
  216. }
  217. @VisibleForTesting
  218. static String getRotateFilename(String str) {
  219. int lastIndexOf = str.lastIndexOf(CommonDefine.DOT);
  220. if (lastIndexOf < 0) {
  221. lastIndexOf = str.length();
  222. }
  223. return str.substring(0, lastIndexOf) + "-90" + ".bmp";
  224. }
  225. }