| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421 |
- package lingtao.net.util;
- import com.aspose.pdf.Document;
- import com.aspose.pdf.optimization.OptimizationOptions;
- import lingtao.net.bean.Product;
- import java.io.File;
- import java.nio.file.Files;
- import java.nio.file.Path;
- import java.nio.file.Paths;
- import java.util.ArrayList;
- import java.util.List;
- /**
- * A级铜版纸不干胶价格
- */
- public class AStickersPrice {
- int bigCountArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000, 50000, 60000, 70000, 80000, 90000,
- 100000};
- 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};
- // 9*5.4cm(一个名片位)以内价格
- public List<Product> oneCradPrice(int count, String role) {
- List<Product> list = new ArrayList<Product>();
- Product pro = new Product();
- int bigCountArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000, 50000, 60000, 70000, 80000, 90000, 100000};
- int[] priceArr;
- priceArr = new int[]{60, 70, 95, 125, 175, 270, 510, 800, 1000, 1200, 1400, 1600, 1800, 2000, 2200};
- for (int i = 0; i < bigCountArr.length; i++) {
- if (bigCountArr[i] < count || list.size() > 5) {
- continue;
- }
- pro = new Product();
- pro.setCount(bigCountArr[i]);
- pro.setPrice(Math.ceil(priceArr[i]));
- list.add(pro);
- }
- return list;
- }
- // 20*1以内
- public List<Product> getPriceLess20(int count) {
- List<Product> list = new ArrayList<Product>();
- Product pro = new Product();
- int bigCountArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000};
- int priceArr[] = {80, 90, 150, 180, 200, 240, 400, 580, 720};
- if (count <= 40000) {
- for (int i = 0; i < bigCountArr.length; i++) {
- if (bigCountArr[i] < count) {
- continue;
- }
- pro = new Product();
- pro.setCount(bigCountArr[i]);
- pro.setPrice(Math.ceil(priceArr[i]));
- list.add(pro);
- }
- } else {
- pro = new Product();
- pro.setCount(count);
- pro.setPrice(Math.ceil((Math.ceil(count / 10000.0) - 4) * 150 + 720));
- list.add(pro);
- }
- return list;
- }
- // 48*1以内
- public List<Product> getPriceLess48(int count) {
- List<Product> list = new ArrayList<Product>();
- Product pro = new Product();
- int bigCountArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000};
- int priceArr[] = {90, 100, 160, 190, 230, 420, 760, 1100, 1400};
- if (count <= 40000) {
- for (int i = 0; i < bigCountArr.length; i++) {
- if (bigCountArr[i] < count) {
- continue;
- }
- pro = new Product();
- pro.setCount(bigCountArr[i]);
- pro.setPrice(Math.ceil(priceArr[i]));
- list.add(pro);
- }
- } else {
- pro = new Product();
- pro.setCount(count);
- pro.setPrice(Math.ceil((Math.ceil(count / 10000.0) - 4) * 300 + 1400));
- list.add(pro);
- }
- return list;
- }
- // 60*1以内
- public List<Product> getPriceLess60(int count) {
- List<Product> list = new ArrayList<Product>();
- Product pro = new Product();
- int bigCountArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000};
- int priceArr[] = {100, 120, 180, 230, 300, 550, 960, 1300, 1600};
- if (count <= 40000) {
- for (int i = 0; i < bigCountArr.length; i++) {
- if (bigCountArr[i] < count) {
- continue;
- }
- pro = new Product();
- pro.setCount(bigCountArr[i]);
- pro.setPrice(Math.ceil(priceArr[i]));
- list.add(pro);
- }
- } else {
- pro = new Product();
- pro.setCount(count);
- pro.setPrice(Math.ceil((Math.ceil(count / 10000.0) - 4) * 400 + 1600));
- list.add(pro);
- }
- return list;
- }
- // 70*1以内
- public List<Product> getPriceLess70(int count) {
- List<Product> list = new ArrayList<Product>();
- Product pro = new Product();
- int bigCountArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000};
- int priceArr[] = {110, 130, 200, 270, 330, 580, 1100, 1500, 1900};
- if (count <= 40000) {
- for (int i = 0; i < bigCountArr.length; i++) {
- if (bigCountArr[i] < count) {
- continue;
- }
- pro = new Product();
- pro.setCount(bigCountArr[i]);
- pro.setPrice(Math.ceil(priceArr[i]));
- list.add(pro);
- }
- } else {
- pro = new Product();
- pro.setCount(count);
- pro.setPrice(Math.ceil((Math.ceil(count / 10000.0) - 4) * 400 + 1900));
- list.add(pro);
- }
- return list;
- }
- // 80*1以内
- public List<Product> getPriceLess80(int count) {
- List<Product> list = new ArrayList<Product>();
- Product pro = new Product();
- int bigCountArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000};
- int priceArr[] = {130, 150, 240, 300, 380, 650, 1200, 1650, 2100};
- if (count <= 40000) {
- for (int i = 0; i < bigCountArr.length; i++) {
- if (bigCountArr[i] < count) {
- continue;
- }
- pro = new Product();
- pro.setCount(bigCountArr[i]);
- pro.setPrice(Math.ceil(priceArr[i]));
- list.add(pro);
- }
- } else {
- pro = new Product();
- pro.setCount(count);
- pro.setPrice(Math.ceil((Math.ceil(count / 10000.0) - 4) * 450 + 2100));
- list.add(pro);
- }
- return list;
- }
- // 90*1以内
- public List<Product> getPriceLess90(int count) {
- List<Product> list = new ArrayList<Product>();
- Product pro = new Product();
- int bigCountArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000};
- int priceArr[] = {150, 170, 245, 320, 420, 750, 1300, 1750, 2200};
- if (count <= 40000) {
- for (int i = 0; i < bigCountArr.length; i++) {
- if (bigCountArr[i] < count) {
- continue;
- }
- pro = new Product();
- pro.setCount(bigCountArr[i]);
- pro.setPrice(Math.ceil(priceArr[i]));
- list.add(pro);
- }
- } else {
- pro = new Product();
- pro.setCount(count);
- pro.setPrice(Math.ceil((Math.ceil(count / 10000.0) - 4) * 450 + 2200));
- list.add(pro);
- }
- return list;
- }
- // 100*1以内
- public List<Product> getPriceLess100(int count) {
- List<Product> list = new ArrayList<Product>();
- Product pro = new Product();
- int bigCountArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000};
- int priceArr[] = {170, 200, 260, 350, 480, 860, 1400, 2000, 2600};
- if (count <= 40000) {
- for (int i = 0; i < bigCountArr.length; i++) {
- if (bigCountArr[i] < count) {
- continue;
- }
- pro = new Product();
- pro.setCount(bigCountArr[i]);
- pro.setPrice(Math.ceil(priceArr[i]));
- list.add(pro);
- }
- } else {
- pro = new Product();
- pro.setCount(count);
- pro.setPrice(Math.ceil((Math.ceil(count / 10000.0) - 4) * 600 + 2600));
- list.add(pro);
- }
- return list;
- }
- // 面积在0.003内
- public List<Product> getPrice(int count) {
- List<Product> list = new ArrayList<Product>();
- Product pro = new Product();
- int bigCountArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000, 50000, 60000, 70000, 80000, 90000, 100000};
- int priceArr[] = {65, 75, 100, 130, 180, 275, 515, 805, 1005, 1205, 1405, 1605, 1805, 2005, 2205};
- if (count <= 40000) {
- for (int i = 0; i < bigCountArr.length; i++) {
- if (bigCountArr[i] < count || list.size() > 5) {
- continue;
- }
- pro = new Product();
- pro.setCount(bigCountArr[i]);
- pro.setPrice(Math.ceil(priceArr[i]));
- list.add(pro);
- }
- } else {
- pro = new Product();
- pro.setCount(count);
- pro.setPrice(Math.ceil((Math.ceil(count / 10000.0) - 4) * 200 + 850));
- list.add(pro);
- }
- return list;
- }
- public List<Product> f_getPrice(int priceArr[], int count, String craftMo) {
- List<Product> list = new ArrayList<Product>();
- Product p = new Product();
- int countArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000, 50000};
- for (int i = 0; i < countArr.length; i++) {
- if (countArr[i] < count || list.size() > 3) {
- continue;
- }
- p = new Product();
- p.setCount(countArr[i]);
- if ("覆哑膜".equals(craftMo)) {
- p.setPrice(Math.ceil(Double.valueOf(priceArr[i]) * 1.2));
- } else {
- p.setPrice(Double.valueOf(priceArr[i]));
- }
- list.add(p);
- }
- return list;
- }
- // 根据面积计算价格
- private List<Product> bigSizeAcountPrice(int count, Double area, List<Product> list, double[] priceArr) {
- Product pro = new Product();
- if (count > bigCountArr[bigCountArr.length - 1]) {
- pro.setCount(count);
- pro.setPrice(Math.ceil(area * count * priceArr[bigCountArr.length - 1]));
- list.add(pro);
- }
- for (int i = 0; i < bigCountArr.length; i++) {
- if (bigCountArr[i] < count || list.size() > 3) {
- continue;
- }
- double[] arrPrice = new double[16];
- if (bigCountArr[i] == 500) {
- arrPrice = new double[]{37, 33, 30, 26, 25, 21, 19, 18, 17, 19, 17, 12.8, 12.5, 12, 11.5, 11};
- } else if (bigCountArr[i] == 1000) {
- arrPrice = new double[]{21, 19, 17, 17, 15, 14, 14, 12, 12, 12.5, 13, 9, 9, 8, 8, 7.8};
- } else if (bigCountArr[i] == 2000) {
- arrPrice = new double[]{14, 13, 13, 12, 11, 11, 10, 10, 9, 10, 11, 7.8, 7.5, 7.5, 7.2, 7};
- } else if (bigCountArr[i] == 3000) {
- arrPrice = new double[]{12, 11, 11, 10, 9, 9.5, 9, 8, 8, 9, 10, 6.8, 6.5, 6.5, 6, 6.5};
- } else if (bigCountArr[i] == 5000) {
- 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};
- } else if (bigCountArr[i] == 10000) {
- 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};
- } else if (bigCountArr[i] == 20000) {
- 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};
- } else if (bigCountArr[i] == 30000) {
- 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};
- } else if (bigCountArr[i] == 40000) {
- 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};
- } else if (bigCountArr[i] == 50000) {
- 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};
- } else if (bigCountArr[i] == 60000) {
- 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};
- } else if (bigCountArr[i] == 70000) {
- 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};
- } else if (bigCountArr[i] == 80000) {
- 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};
- } else if (bigCountArr[i] == 90000) {
- 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};
- } else if (bigCountArr[i] == 100000) {
- 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};
- }
- double pirce = getPrcieInArea(bigCountArr[i], area, arrPrice);
- pro = new Product();
- pro.setCount(bigCountArr[i]);
- pro.setPrice(Math.ceil(pirce));
- list.add(pro);
- }
- return list;
- }
- // 判断小尺寸是否大于大尺寸价格
- private double getPrcieInArea(int count, Double area, double[] priceArr) {
- double lastPrice = 0, price = 0;
- if (area > AreaArr[AreaArr.length - 1]) {
- price = area * count * priceArr[AreaArr.length - 1];
- lastPrice = area * count * priceArr[AreaArr.length - 2];
- if (lastPrice > price) {
- price = lastPrice;
- }
- }
- for (int i = 0; i < AreaArr.length; i++) {
- if (AreaArr[i] < area) {
- continue;
- }
- double lastArea = 0;
- if (i > 0) {
- lastArea = AreaArr[i - 1];
- lastPrice = lastArea * count * priceArr[i - 1];
- }
- price = area * count * priceArr[i];
- if (lastPrice > price) {
- price = lastPrice;
- }
- break;
- }
- return price;
- }
- public List<Product> getPrice(int count, Double area, String role) {
- List<Product> list = new ArrayList<Product>();
- double[] priceArrA = new double[16];
- if (area <= 0.004) {
- 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};
- } else if (area <= 0.006) {
- 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};
- } else if (area <= 0.008) {
- 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};
- } else if (area <= 0.01) {
- 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};
- } else if (area <= 0.012) {
- 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};
- } else if (area <= 0.015) {
- 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};
- } else if (area <= 0.017) {
- 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};
- } else if (area <= 0.018) {
- 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};
- } else if (area <= 0.02) {
- 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};
- } else if (area <= 0.03) {
- 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};
- } else if (area <= 0.04) {
- 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};
- } else if (area <= 0.06) {
- 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};
- } else if (area <= 0.1) {
- 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};
- } else if (area <= 0.2) {
- 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};
- } else if (area <= 0.3) {
- 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};
- } else if (area > 0.3) {
- 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};
- }
- list = bigSizeAcountPrice(count, area, list, priceArrA);
- return list;
- }
- public static void main(String[] args) {
- String source = "C:\\Users\\231010\\Downloads\\蓝朝旺.pdf";
- String target = "C:\\Users\\231010\\Downloads\\蓝朝旺1.pdf";
- optimize(source, target);
- }
- public static void optimize(String source, String target) {
- Document doc = new Document(source);
- //设置压缩属性
- OptimizationOptions opt = new OptimizationOptions();
- //删除PDF不必要的对象
- opt.setRemoveUnusedObjects(true);
- //链接重复流
- opt.setLinkDuplcateStreams(false);
- //删除未使用的流
- opt.setRemoveUnusedStreams(false);
- //删除不必要的字体
- opt.setUnembedFonts(true);
- //压缩PDF中的图片
- opt.getImageCompressionOptions().setCompressImages(true);
- //图片压缩比, 0 到100可选,越低压缩比越大
- opt.getImageCompressionOptions().setImageQuality(100);
- doc.optimizeResources(opt);
- //优化web的PDF文档
- doc.optimize();
- doc.save(target);
- }
- }
|