Webページの特定部分を印刷しようとしているのですが、うまくできていません。
現在下記のviews.pyで渡している「html」という変数をcustomer_orders.htmlにて表示させています。
実現したいことはこの「html」をA4規格に合わせて印刷(実際の処理はpdfでパソコンに保存)させたいです。
customer_orders.html内に記述しているJavascriptで下記のように処理しているのですが画像1のようになってしまいます。
詳細設定で余白なしにすればかなり近づくのですが、それでも画像2のように下が微妙に足りません。
なのでページを何枚も表示しているとその分上にずれてきてしまいます。
そこで「html」にCSSを適用できればと考え、調べながらやってみたのですができませんでした。
方法をご存じの方がいたらご教授お願いします。
また違う方法で実現できるのであればその方法をご存じの方がいらっしゃったら是非教えてください。
よろしくお願いします。
views.py
1html = html + get_check_report(send_date, pick_place, customer) 2... 3'html': html, 4... 5def get_check_report(send_date, pick_place, customer): 6 7 deliver_date = datetime.strptime(send_date, '%Y-%m-%d') + relativedelta(days=+customer.delay_days) 8 o_items = OrderItem.objects.filter( 9 is_ordered=True, send_date=send_date, customer=customer 10 ) 11 # remove demo data 12 o_items = o_items.exclude(customer__code='demo') 13 if pick_place.name != '〇〇': 14 # if pick_place.name != '-------------': 15 o_items = o_items.filter(item__pick_place=pick_place) 16 o_items = o_items.values('item_id', 'item__pick_place_id').annotate( 17 category_id=Max('item__item_category__id'), 18 category_name=Max('item__item_category__name'), 19 item_name=Max('item__name'), 20 item_code=Max('item__code'), 21 item_unit_name=Max('item__item_unit__name'), 22 order_count=Sum('order_count'), 23 price=Sum('price'), 24 base_price=Max('base_price'), 25 item__pick_place__name=Max('item__pick_place__name'), 26 ).order_by('item__pick_place_id', 'category_id', 'item_id') 27 order_items = [ 28 o for o in o_items 29 ] 30 if len(order_items) == 0: 31 return '' 32 order_item_ary = [] 33 html = '' 34 # if pick_place.name == '〇〇': 35 if pick_place.name == '------------': 36 row_count = 14 37 type_1 = True 38 type_2 = True 39 deliver_price = DeliverPrice.objects.filter( 40 deliver_date=deliver_date, 41 send_date=send_date, 42 customer=customer, 43 code=settings.DELIVER_CODE 44 ).first() 45 if deliver_price is not None: 46 order_items.append({ 47 'category_name': 'deliver_t_price', 48 'item_name': '〇〇', 49 'item_code': '', 50 'order_count': deliver_price.total_count(), 51 'base_price': deliver_price.t_price, 52 'price': deliver_price.total_price(), 53 'item_unit_name': '〇', 54 }) 55 default_deliver_price = DefaultDeliverPrice.objects.filter( 56 customer=customer, 57 deliver_date=deliver_date 58 ).first() 59 if default_deliver_price is not None: 60 order_items.append({ 61 'category_name': 'deliver_price', 62 'item_name': '〇〇', 63 'item_code': '', 64 'order_count': 1, 65 'base_price': default_deliver_price.price, 66 'price': default_deliver_price.price, 67 'item_unit_name': '〇', 68 }) 69 else: 70 row_count = 42 71 type_1 = True 72 type_2 = False 73 74 for order_item in order_items: 75 order_item_ary.append(order_item) 76 if len(order_item_ary) == row_count: 77 html = html + render_to_string( 78 'root/Components/report_customer_check_page.html', 79 { 80 'pick_place': pick_place, 81 'send_date': send_date, 82 'customer': customer, 83 'deliver_date': deliver_date.strftime('%Y-%m-%d'), 84 'order_items': order_item_ary, 85 'type_1': type_1, 86 'type_2': type_2 87 }, 88 ) 89 order_item_ary = [] 90 for i in range(len(order_item_ary), row_count): 91 order_item_ary.append(None) 92 deliver_price = DeliverPrice.objects.filter() 93 html = html + render_to_string( 94 'root/Components/report_customer_check_page.html', 95 { 96 'pick_place': pick_place, 97 'send_date': send_date, 98 'customer': customer, 99 'deliver_date': deliver_date.strftime('%Y-%m-%d'), 100 'order_items': order_item_ary, 101 'type_1': type_1, 102 'type_2': type_2 103 }, 104 ) 105 106 return html
customer_orders.html
1<div id="print_area"> 2 <div class="" id="id_total_pdf" style="width: 800px; background: white; margin-left: auto; margin-right: auto;"> 3 {{ html | safe }} 4 </div> 5</div> 6 7---以下JS--- 8 $('#id_print').click(function () { 9 var area_text = document.getElementById("id_total_pdf"); 10 var html_doc = document.body.innerHTML; 11 document.body.innerHTML = area_text.innerHTML; 12 window.print(); 13 document.body.innerHTML = html_doc; 14}
CSS
1.print-off { 2 display: none; 3}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。