mirror of https://gitlab.federez.net/re2o/re2o
11 changed files with 294 additions and 22 deletions
@ -0,0 +1,32 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Generated by Django 1.10.7 on 2018-09-07 14:07 |
|||
from __future__ import unicode_literals |
|||
|
|||
from django.conf import settings |
|||
from django.db import migrations, models |
|||
import django.db.models.deletion |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('printer', '0003_auto_20180803_0854'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AddField( |
|||
model_name='jobwithoptions', |
|||
name='pages', |
|||
field=models.IntegerField(default=0), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='jobwithoptions', |
|||
name='format', |
|||
field=models.CharField(choices=[('A4', 'A4'), ('A3', 'A3')], default='A4', max_length=255), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='jobwithoptions', |
|||
name='printAs', |
|||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='print_as_user', to=settings.AUTH_USER_MODEL), |
|||
), |
|||
] |
|||
@ -0,0 +1,20 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Generated by Django 1.10.7 on 2018-09-08 08:52 |
|||
from __future__ import unicode_literals |
|||
|
|||
from django.db import migrations, models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('printer', '0004_auto_20180907_1607'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AddField( |
|||
model_name='jobwithoptions', |
|||
name='filename', |
|||
field=models.CharField(max_length=255, null=True), |
|||
), |
|||
] |
|||
@ -0,0 +1,84 @@ |
|||
{% extends "base.html" %} |
|||
{% load staticfiles %} |
|||
{% load i18n %} |
|||
|
|||
{% load bootstrap3 %} |
|||
{% load massive_bootstrap_form %} |
|||
{% load static %} |
|||
{% block title %}Printing interface{% endblock %} |
|||
|
|||
{% block content %} |
|||
<form class="form" method="post" enctype="multipart/form-data"> |
|||
{% csrf_token %} |
|||
<h3>{% trans "Confirm printing" %}</h3> |
|||
{{ jobform.management_form }} |
|||
{% bootstrap_formset_errors jobform %} |
|||
<div id="form_set" class="form-group"> |
|||
{% for job in jobform.forms %} |
|||
<div class='file_to_print form-inline'> |
|||
{% massive_bootstrap_form job "" label_class='sr-only' %} |
|||
</div> |
|||
{% endfor %} |
|||
</div> |
|||
<!-- <input class="btn btn-primary btn-sm" role="button" value="{% trans "Add a file"%}" id="add_one"> --> |
|||
{% bootstrap_button action_name name="options" button_type="submit" icon="star" %} |
|||
</form> |
|||
<!-- <script type="text/javascript"> --> |
|||
|
|||
<!-- var template = `{% bootstrap_form jobform.empty_form label_class='sr-only' %} --> |
|||
<!-- <button class="btn btn-danger btn-sm" --> |
|||
<!-- id="id_form-__prefix__-job-remove" type="button"> --> |
|||
<!-- <span class="fa fa-times"></span> --> |
|||
<!-- </button>` --> |
|||
|
|||
<!-- function add_job() { --> |
|||
<!-- var new_index = --> |
|||
<!-- document.getElementsByClassName('file_to_print').length; --> |
|||
<!-- document.getElementById('id_form-TOTAL_FORMS').value ++; --> |
|||
<!-- var new_job = document.createElement('div'); --> |
|||
<!-- new_job.className = 'file_to_print form-inline'; --> |
|||
<!-- new_job.innerHTML = template.replace(/__prefix__/g, new_index); --> |
|||
<!-- document.getElementById('form_set').appendChild(new_job); --> |
|||
<!-- add_listener_for_id(new_index); --> |
|||
<!-- } --> |
|||
|
|||
|
|||
<!-- function del_job(event){ --> |
|||
<!-- var job = event.target.parentNode; --> |
|||
<!-- job.parentNode.removeChild(job); --> |
|||
<!-- document.getElementById('id_form-TOTAL_FORMS').value --; --> |
|||
<!-- } --> |
|||
|
|||
|
|||
<!-- function add_listener_for_id(i){ --> |
|||
<!-- document.getElementById('id_form-' + i.toString() + '-job-remove') --> |
|||
<!-- .addEventListener("click", function(event){ --> |
|||
<!-- var job = event.target.parentNode; --> |
|||
<!-- job.parentNode.removeChild(job); --> |
|||
<!-- document.getElementById('id_form-TOTAL_FORMS').value --; --> |
|||
<!-- } --> |
|||
<!-- ) --> |
|||
<!-- } --> |
|||
|
|||
|
|||
<!-- // Add events manager when DOM is fully loaded --> |
|||
<!-- document.addEventListener( --> |
|||
<!-- "DOMContentLoaded", --> |
|||
<!-- function() { --> |
|||
<!-- document.getElementById("add_one") --> |
|||
<!-- .addEventListener("click", add_job, true); --> |
|||
<!-- document.getElementById('id_form-0-job-remove') --> |
|||
<!-- .addEventListener("click", function(event){ --> |
|||
<!-- var job = event.target.parentNode; --> |
|||
<!-- job.parentNode.removeChild(job); --> |
|||
<!-- document.getElementById('id_form-TOTAL_FORMS').value --; --> |
|||
<!-- } --> |
|||
<!-- ) --> |
|||
|
|||
<!-- } --> |
|||
|
|||
<!-- ); --> |
|||
|
|||
<!-- </script> --> |
|||
{% endblock %} |
|||
|
|||
@ -0,0 +1,28 @@ |
|||
import subprocess |
|||
|
|||
|
|||
def pdfinfo(file_path): |
|||
""" |
|||
Uses pdfinfo to extract the PDF meta information. |
|||
Returns metainfo in a dictionary. |
|||
requires poppler-utils |
|||
""" |
|||
def _extract(row): |
|||
"""Extracts the right hand value from a : delimited row""" |
|||
row=row.decode() |
|||
return row.split(':', 1)[1].strip() |
|||
|
|||
output = {} |
|||
|
|||
labels = ['Title', 'Author', 'Creator', 'Producer', 'CreationDate', 'ModDate', |
|||
'Tagged', 'Pages', 'Encrypted', 'Page size', |
|||
'File size', 'Optimized', 'PDF version'] |
|||
|
|||
cmd_output = subprocess.check_output(['/usr/bin/pdfinfo', file_path]) |
|||
for line in cmd_output.splitlines(): |
|||
for label in labels: |
|||
if label in line.decode(): |
|||
output[label] = _extract(line) |
|||
|
|||
return output |
|||
|
|||
Loading…
Reference in new issue