PdfRenderThread.java 9.5 KB

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