AStickersPrice.java 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421
  1. package lingtao.net.util;
  2. import com.aspose.pdf.Document;
  3. import com.aspose.pdf.optimization.OptimizationOptions;
  4. import lingtao.net.bean.Product;
  5. import java.io.File;
  6. import java.nio.file.Files;
  7. import java.nio.file.Path;
  8. import java.nio.file.Paths;
  9. import java.util.ArrayList;
  10. import java.util.List;
  11. /**
  12. * A级铜版纸不干胶价格
  13. */
  14. public class AStickersPrice {
  15. int bigCountArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000, 50000, 60000, 70000, 80000, 90000,
  16. 100000};
  17. double AreaArr[] = {0.004, 0.006, 0.008, 0.01, 0.012, 0.015, 0.017, 0.018, 0.02, 0.03, 0.04, 0.06, 0.1, 0.2, 0.3};
  18. // 9*5.4cm(一个名片位)以内价格
  19. public List<Product> oneCradPrice(int count, String role) {
  20. List<Product> list = new ArrayList<Product>();
  21. Product pro = new Product();
  22. int bigCountArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000, 50000, 60000, 70000, 80000, 90000, 100000};
  23. int[] priceArr;
  24. priceArr = new int[]{60, 70, 95, 125, 175, 270, 510, 800, 1000, 1200, 1400, 1600, 1800, 2000, 2200};
  25. for (int i = 0; i < bigCountArr.length; i++) {
  26. if (bigCountArr[i] < count || list.size() > 5) {
  27. continue;
  28. }
  29. pro = new Product();
  30. pro.setCount(bigCountArr[i]);
  31. pro.setPrice(Math.ceil(priceArr[i]));
  32. list.add(pro);
  33. }
  34. return list;
  35. }
  36. // 20*1以内
  37. public List<Product> getPriceLess20(int count) {
  38. List<Product> list = new ArrayList<Product>();
  39. Product pro = new Product();
  40. int bigCountArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000};
  41. int priceArr[] = {80, 90, 150, 180, 200, 240, 400, 580, 720};
  42. if (count <= 40000) {
  43. for (int i = 0; i < bigCountArr.length; i++) {
  44. if (bigCountArr[i] < count) {
  45. continue;
  46. }
  47. pro = new Product();
  48. pro.setCount(bigCountArr[i]);
  49. pro.setPrice(Math.ceil(priceArr[i]));
  50. list.add(pro);
  51. }
  52. } else {
  53. pro = new Product();
  54. pro.setCount(count);
  55. pro.setPrice(Math.ceil((Math.ceil(count / 10000.0) - 4) * 150 + 720));
  56. list.add(pro);
  57. }
  58. return list;
  59. }
  60. // 48*1以内
  61. public List<Product> getPriceLess48(int count) {
  62. List<Product> list = new ArrayList<Product>();
  63. Product pro = new Product();
  64. int bigCountArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000};
  65. int priceArr[] = {90, 100, 160, 190, 230, 420, 760, 1100, 1400};
  66. if (count <= 40000) {
  67. for (int i = 0; i < bigCountArr.length; i++) {
  68. if (bigCountArr[i] < count) {
  69. continue;
  70. }
  71. pro = new Product();
  72. pro.setCount(bigCountArr[i]);
  73. pro.setPrice(Math.ceil(priceArr[i]));
  74. list.add(pro);
  75. }
  76. } else {
  77. pro = new Product();
  78. pro.setCount(count);
  79. pro.setPrice(Math.ceil((Math.ceil(count / 10000.0) - 4) * 300 + 1400));
  80. list.add(pro);
  81. }
  82. return list;
  83. }
  84. // 60*1以内
  85. public List<Product> getPriceLess60(int count) {
  86. List<Product> list = new ArrayList<Product>();
  87. Product pro = new Product();
  88. int bigCountArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000};
  89. int priceArr[] = {100, 120, 180, 230, 300, 550, 960, 1300, 1600};
  90. if (count <= 40000) {
  91. for (int i = 0; i < bigCountArr.length; i++) {
  92. if (bigCountArr[i] < count) {
  93. continue;
  94. }
  95. pro = new Product();
  96. pro.setCount(bigCountArr[i]);
  97. pro.setPrice(Math.ceil(priceArr[i]));
  98. list.add(pro);
  99. }
  100. } else {
  101. pro = new Product();
  102. pro.setCount(count);
  103. pro.setPrice(Math.ceil((Math.ceil(count / 10000.0) - 4) * 400 + 1600));
  104. list.add(pro);
  105. }
  106. return list;
  107. }
  108. // 70*1以内
  109. public List<Product> getPriceLess70(int count) {
  110. List<Product> list = new ArrayList<Product>();
  111. Product pro = new Product();
  112. int bigCountArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000};
  113. int priceArr[] = {110, 130, 200, 270, 330, 580, 1100, 1500, 1900};
  114. if (count <= 40000) {
  115. for (int i = 0; i < bigCountArr.length; i++) {
  116. if (bigCountArr[i] < count) {
  117. continue;
  118. }
  119. pro = new Product();
  120. pro.setCount(bigCountArr[i]);
  121. pro.setPrice(Math.ceil(priceArr[i]));
  122. list.add(pro);
  123. }
  124. } else {
  125. pro = new Product();
  126. pro.setCount(count);
  127. pro.setPrice(Math.ceil((Math.ceil(count / 10000.0) - 4) * 400 + 1900));
  128. list.add(pro);
  129. }
  130. return list;
  131. }
  132. // 80*1以内
  133. public List<Product> getPriceLess80(int count) {
  134. List<Product> list = new ArrayList<Product>();
  135. Product pro = new Product();
  136. int bigCountArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000};
  137. int priceArr[] = {130, 150, 240, 300, 380, 650, 1200, 1650, 2100};
  138. if (count <= 40000) {
  139. for (int i = 0; i < bigCountArr.length; i++) {
  140. if (bigCountArr[i] < count) {
  141. continue;
  142. }
  143. pro = new Product();
  144. pro.setCount(bigCountArr[i]);
  145. pro.setPrice(Math.ceil(priceArr[i]));
  146. list.add(pro);
  147. }
  148. } else {
  149. pro = new Product();
  150. pro.setCount(count);
  151. pro.setPrice(Math.ceil((Math.ceil(count / 10000.0) - 4) * 450 + 2100));
  152. list.add(pro);
  153. }
  154. return list;
  155. }
  156. // 90*1以内
  157. public List<Product> getPriceLess90(int count) {
  158. List<Product> list = new ArrayList<Product>();
  159. Product pro = new Product();
  160. int bigCountArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000};
  161. int priceArr[] = {150, 170, 245, 320, 420, 750, 1300, 1750, 2200};
  162. if (count <= 40000) {
  163. for (int i = 0; i < bigCountArr.length; i++) {
  164. if (bigCountArr[i] < count) {
  165. continue;
  166. }
  167. pro = new Product();
  168. pro.setCount(bigCountArr[i]);
  169. pro.setPrice(Math.ceil(priceArr[i]));
  170. list.add(pro);
  171. }
  172. } else {
  173. pro = new Product();
  174. pro.setCount(count);
  175. pro.setPrice(Math.ceil((Math.ceil(count / 10000.0) - 4) * 450 + 2200));
  176. list.add(pro);
  177. }
  178. return list;
  179. }
  180. // 100*1以内
  181. public List<Product> getPriceLess100(int count) {
  182. List<Product> list = new ArrayList<Product>();
  183. Product pro = new Product();
  184. int bigCountArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000};
  185. int priceArr[] = {170, 200, 260, 350, 480, 860, 1400, 2000, 2600};
  186. if (count <= 40000) {
  187. for (int i = 0; i < bigCountArr.length; i++) {
  188. if (bigCountArr[i] < count) {
  189. continue;
  190. }
  191. pro = new Product();
  192. pro.setCount(bigCountArr[i]);
  193. pro.setPrice(Math.ceil(priceArr[i]));
  194. list.add(pro);
  195. }
  196. } else {
  197. pro = new Product();
  198. pro.setCount(count);
  199. pro.setPrice(Math.ceil((Math.ceil(count / 10000.0) - 4) * 600 + 2600));
  200. list.add(pro);
  201. }
  202. return list;
  203. }
  204. // 面积在0.003内
  205. public List<Product> getPrice(int count) {
  206. List<Product> list = new ArrayList<Product>();
  207. Product pro = new Product();
  208. int bigCountArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000, 50000, 60000, 70000, 80000, 90000, 100000};
  209. int priceArr[] = {65, 75, 100, 130, 180, 275, 515, 805, 1005, 1205, 1405, 1605, 1805, 2005, 2205};
  210. if (count <= 40000) {
  211. for (int i = 0; i < bigCountArr.length; i++) {
  212. if (bigCountArr[i] < count || list.size() > 5) {
  213. continue;
  214. }
  215. pro = new Product();
  216. pro.setCount(bigCountArr[i]);
  217. pro.setPrice(Math.ceil(priceArr[i]));
  218. list.add(pro);
  219. }
  220. } else {
  221. pro = new Product();
  222. pro.setCount(count);
  223. pro.setPrice(Math.ceil((Math.ceil(count / 10000.0) - 4) * 200 + 850));
  224. list.add(pro);
  225. }
  226. return list;
  227. }
  228. public List<Product> f_getPrice(int priceArr[], int count, String craftMo) {
  229. List<Product> list = new ArrayList<Product>();
  230. Product p = new Product();
  231. int countArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000, 50000};
  232. for (int i = 0; i < countArr.length; i++) {
  233. if (countArr[i] < count || list.size() > 3) {
  234. continue;
  235. }
  236. p = new Product();
  237. p.setCount(countArr[i]);
  238. if ("覆哑膜".equals(craftMo)) {
  239. p.setPrice(Math.ceil(Double.valueOf(priceArr[i]) * 1.2));
  240. } else {
  241. p.setPrice(Double.valueOf(priceArr[i]));
  242. }
  243. list.add(p);
  244. }
  245. return list;
  246. }
  247. // 根据面积计算价格
  248. private List<Product> bigSizeAcountPrice(int count, Double area, List<Product> list, double[] priceArr) {
  249. Product pro = new Product();
  250. if (count > bigCountArr[bigCountArr.length - 1]) {
  251. pro.setCount(count);
  252. pro.setPrice(Math.ceil(area * count * priceArr[bigCountArr.length - 1]));
  253. list.add(pro);
  254. }
  255. for (int i = 0; i < bigCountArr.length; i++) {
  256. if (bigCountArr[i] < count || list.size() > 3) {
  257. continue;
  258. }
  259. double[] arrPrice = new double[16];
  260. if (bigCountArr[i] == 500) {
  261. arrPrice = new double[]{37, 33, 30, 26, 25, 21, 19, 18, 17, 19, 17, 12.8, 12.5, 12, 11.5, 11};
  262. } else if (bigCountArr[i] == 1000) {
  263. arrPrice = new double[]{21, 19, 17, 17, 15, 14, 14, 12, 12, 12.5, 13, 9, 9, 8, 8, 7.8};
  264. } else if (bigCountArr[i] == 2000) {
  265. arrPrice = new double[]{14, 13, 13, 12, 11, 11, 10, 10, 9, 10, 11, 7.8, 7.5, 7.5, 7.2, 7};
  266. } else if (bigCountArr[i] == 3000) {
  267. arrPrice = new double[]{12, 11, 11, 10, 9, 9.5, 9, 8, 8, 9, 10, 6.8, 6.5, 6.5, 6, 6.5};
  268. } else if (bigCountArr[i] == 5000) {
  269. arrPrice = new double[]{10, 9.5, 8, 7.8, 8.5, 9, 8.3, 7, 8, 6.5, 8, 6, 6, 6, 5.5, 5};
  270. } else if (bigCountArr[i] == 10000) {
  271. arrPrice = new double[]{8, 7.5, 6.5, 6.5, 7.6, 8, 7.3, 6, 7.5, 6, 6, 6, 6, 6, 5, 5};
  272. } else if (bigCountArr[i] == 20000) {
  273. arrPrice = new double[]{7.6, 6.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5, 4.5};
  274. } else if (bigCountArr[i] == 30000) {
  275. arrPrice = new double[]{7.6, 6.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5, 4.5};
  276. } else if (bigCountArr[i] == 40000) {
  277. arrPrice = new double[]{7.6, 6.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5, 4.5};
  278. } else if (bigCountArr[i] == 50000) {
  279. arrPrice = new double[]{7.5, 6.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5, 4.5};
  280. } else if (bigCountArr[i] == 60000) {
  281. arrPrice = new double[]{7.5, 6.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5, 4.5};
  282. } else if (bigCountArr[i] == 70000) {
  283. arrPrice = new double[]{7.5, 6.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5, 4.5};
  284. } else if (bigCountArr[i] == 80000) {
  285. arrPrice = new double[]{7.5, 6.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5, 4.5};
  286. } else if (bigCountArr[i] == 90000) {
  287. arrPrice = new double[]{7.5, 6.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5, 4.5};
  288. } else if (bigCountArr[i] == 100000) {
  289. arrPrice = new double[]{7.5, 6.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5, 4.5};
  290. }
  291. double pirce = getPrcieInArea(bigCountArr[i], area, arrPrice);
  292. pro = new Product();
  293. pro.setCount(bigCountArr[i]);
  294. pro.setPrice(Math.ceil(pirce));
  295. list.add(pro);
  296. }
  297. return list;
  298. }
  299. // 判断小尺寸是否大于大尺寸价格
  300. private double getPrcieInArea(int count, Double area, double[] priceArr) {
  301. double lastPrice = 0, price = 0;
  302. if (area > AreaArr[AreaArr.length - 1]) {
  303. price = area * count * priceArr[AreaArr.length - 1];
  304. lastPrice = area * count * priceArr[AreaArr.length - 2];
  305. if (lastPrice > price) {
  306. price = lastPrice;
  307. }
  308. }
  309. for (int i = 0; i < AreaArr.length; i++) {
  310. if (AreaArr[i] < area) {
  311. continue;
  312. }
  313. double lastArea = 0;
  314. if (i > 0) {
  315. lastArea = AreaArr[i - 1];
  316. lastPrice = lastArea * count * priceArr[i - 1];
  317. }
  318. price = area * count * priceArr[i];
  319. if (lastPrice > price) {
  320. price = lastPrice;
  321. }
  322. break;
  323. }
  324. return price;
  325. }
  326. public List<Product> getPrice(int count, Double area, String role) {
  327. List<Product> list = new ArrayList<Product>();
  328. double[] priceArrA = new double[16];
  329. if (area <= 0.004) {
  330. priceArrA = new double[]{37.0, 21.0, 14.0, 12.0, 10.0, 8.0, 7.6, 7.6, 7.6, 7.5, 7.5, 7.5, 7.5, 7.5, 7.5, 7.5};
  331. } else if (area <= 0.006) {
  332. priceArrA = new double[]{33.0, 19.0, 13.0, 11.0, 9.5, 7.5, 6.5, 6.5, 6.5, 6.5, 6.5, 6.5, 6.5, 6.5, 6.5, 6.5};
  333. } else if (area <= 0.008) {
  334. priceArrA = new double[]{30.0, 17.0, 13.0, 11.0, 8, 6.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5};
  335. } else if (area <= 0.01) {
  336. priceArrA = new double[]{26.0, 17.0, 12.0, 10.0, 7.8, 6.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5};
  337. } else if (area <= 0.012) {
  338. priceArrA = new double[]{25.0, 15.0, 11.0, 9.0, 8.5, 7.6, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5};
  339. } else if (area <= 0.015) {
  340. priceArrA = new double[]{21.0, 14.0, 11.0, 9.5, 9, 8, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5};
  341. } else if (area <= 0.017) {
  342. priceArrA = new double[]{19.0, 14.0, 10, 9, 8.3, 7.3, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5};
  343. } else if (area <= 0.018) {
  344. priceArrA = new double[]{18.0, 12.0, 10.0, 8.0, 7.0, 6.0, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5};
  345. } else if (area <= 0.02) {
  346. priceArrA = new double[]{17.0, 12.0, 9.0, 8.0, 8.0, 7.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5};
  347. } else if (area <= 0.03) {
  348. priceArrA = new double[]{19.0, 12.5, 10.0, 9.0, 6.5, 6.0, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5};
  349. } else if (area <= 0.04) {
  350. priceArrA = new double[]{17.0, 13.0, 11.0, 10.0, 6.0, 6.0, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5};
  351. } else if (area <= 0.06) {
  352. priceArrA = new double[]{12.8, 9.0, 7.8, 6.8, 6.0, 6.0, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5};
  353. } else if (area <= 0.1) {
  354. priceArrA = new double[]{12.5, 9.0, 7.5, 6.5, 6.0, 6.0, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5};
  355. } else if (area <= 0.2) {
  356. priceArrA = new double[]{12.0, 8.0, 7.5, 6.5, 6.0, 6.0, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5};
  357. } else if (area <= 0.3) {
  358. priceArrA = new double[]{11.5, 8.0, 7.2, 6.0, 5.5, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0};
  359. } else if (area > 0.3) {
  360. priceArrA = new double[]{11.0, 7.8, 7.0, 6.5, 5.0, 5.0, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5};
  361. }
  362. list = bigSizeAcountPrice(count, area, list, priceArrA);
  363. return list;
  364. }
  365. public static void main(String[] args) {
  366. String source = "C:\\Users\\231010\\Downloads\\蓝朝旺.pdf";
  367. String target = "C:\\Users\\231010\\Downloads\\蓝朝旺1.pdf";
  368. optimize(source, target);
  369. }
  370. public static void optimize(String source, String target) {
  371. Document doc = new Document(source);
  372. //设置压缩属性
  373. OptimizationOptions opt = new OptimizationOptions();
  374. //删除PDF不必要的对象
  375. opt.setRemoveUnusedObjects(true);
  376. //链接重复流
  377. opt.setLinkDuplcateStreams(false);
  378. //删除未使用的流
  379. opt.setRemoveUnusedStreams(false);
  380. //删除不必要的字体
  381. opt.setUnembedFonts(true);
  382. //压缩PDF中的图片
  383. opt.getImageCompressionOptions().setCompressImages(true);
  384. //图片压缩比, 0 到100可选,越低压缩比越大
  385. opt.getImageCompressionOptions().setImageQuality(100);
  386. doc.optimizeResources(opt);
  387. //优化web的PDF文档
  388. doc.optimize();
  389. doc.save(target);
  390. }
  391. }