File size: 9,645 Bytes
70538d6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Print Specifications Generator</title>
    <script src="https://cdn.tailwindcss.com"></script>
    <style>
        .output-box {
            min-height: 300px;
            white-space: pre-wrap;
            font-family: monospace;
        }
        .copy-btn {
            transition: all 0.2s;
        }
        .copy-btn:hover {
            transform: translateY(-2px);
        }
        .copy-btn:active {
            transform: translateY(0);
        }
    </style>
</head>
<body class="bg-gray-50">
    <div class="container mx-auto px-4 py-8 max-w-4xl">
        <h1 class="text-3xl font-bold text-center mb-6 text-gray-800">Print Specifications Generator</h1>
        
        <div class="bg-white rounded-lg shadow-md p-6 mb-8">
            <div class="mb-4">
                <label for="bookText" class="block text-sm font-medium text-gray-700 mb-2">Paste Book Text:</label>
                <textarea id="bookText" rows="10" class="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500"></textarea>
            </div>
            
            <div class="grid grid-cols-1 md:grid-cols-2 gap-4 mb-4">
                <div>
                    <label for="printRun" class="block text-sm font-medium text-gray-700 mb-2">Print Run (copies):</label>
                    <input type="number" id="printRun" min="1" value="100" class="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500">
                </div>
                <div>
                    <label for="formatSize" class="block text-sm font-medium text-gray-700 mb-2">Format Size:</label>
                    <select id="formatSize" class="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500">
                        <option value="A5">A5 (148×210 mm)</option>
                        <option value="A4">A4 (210×297 mm)</option>
                        <option value="B5">B5 (176×250 mm)</option>
                        <option value="custom">Custom</option>
                    </select>
                </div>
            </div>
            
            <div class="mb-4">
                <label class="inline-flex items-center">
                    <input type="checkbox" id="hasImages" class="rounded border-gray-300 text-indigo-600 shadow-sm focus:border-indigo-300 focus:ring focus:ring-offset-0 focus:ring-indigo-200 focus:ring-opacity-50">
                    <span class="ml-2 text-sm text-gray-700">Contains images/illustrations</span>
                </label>
            </div>
            
            <div class="flex justify-center">
                <button id="generateBtn" class="px-6 py-3 bg-indigo-600 text-white font-medium rounded-md shadow-sm hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500">
                    Generate Print Specs
                </button>
            </div>
        </div>
        
        <div class="grid grid-cols-1 md:grid-cols-2 gap-6">
            <div class="bg-white rounded-lg shadow-md p-6">
                <div class="flex justify-between items-center mb-4">
                    <h2 class="text-xl font-semibold text-gray-800">Russian Version</h2>
                    <button onclick="copyToClipboard('russianOutput')" class="copy-btn px-3 py-1 bg-gray-100 text-gray-700 text-sm rounded hover:bg-gray-200">
                        Copy Text
                    </button>
                </div>
                <div id="russianOutput" class="output-box p-3 border border-gray-200 rounded bg-gray-50 text-gray-800 overflow-auto"></div>
            </div>
            
            <div class="bg-white rounded-lg shadow-md p-6">
                <div class="flex justify-between items-center mb-4">
                    <h2 class="text-xl font-semibold text-gray-800">Chinese Version</h2>
                    <button onclick="copyToClipboard('chineseOutput')" class="copy-btn px-3 py-1 bg-gray-100 text-gray-700 text-sm rounded hover:bg-gray-200">
                        Copy Text
                    </button>
                </div>
                <div id="chineseOutput" class="output-box p-3 border border-gray-200 rounded bg-gray-50 text-gray-800 overflow-auto"></div>
            </div>
        </div>
    </div>

    <script>
        document.getElementById('generateBtn').addEventListener('click', generatePrintSpecs);
        
        function generatePrintSpecs() {
            const bookText = document.getElementById('bookText').value;
            const printRun = document.getElementById('printRun').value;
            const formatSize = document.getElementById('formatSize').value;
            const hasImages = document.getElementById('hasImages').checked;
            
            if (!bookText.trim()) {
                alert('Please paste the book text');
                return;
            }
            
            // Calculate word count and pages
            const wordCount = bookText.trim().split(/\s+/).length;
            let wordsPerPage;
            
            switch(formatSize) {
                case 'A5': wordsPerPage = 280; break;
                case 'A4': wordsPerPage = 500; break;
                case 'B5': wordsPerPage = 350; break;
                default: wordsPerPage = 280;
            }
            
            const pageCount = Math.ceil(wordCount / wordsPerPage);
            
            // Determine binding method
            let bindingMethod;
            if (pageCount <= 48) {
                bindingMethod = 'скрепка (степлер)';
            } else if (pageCount <= 96) {
                bindingMethod = 'клеевое бесшвейное скрепление (КБС)';
            } else {
                bindingMethod = 'прошивка нитками';
            }
            
            // Determine paper type
            const innerPaper = hasImages ? 'мелованная бумага 115 г/м²' : 'офсетная бумага 80 г/м²';
            const coverPaper = 'картон 250 г/м² с матовой ламинацией';
            
            // Generate Russian output
            const russianOutput = `Здравствуйте,

Требуется расчет стоимости печати книги со следующими параметрами:

• Формат: ${formatSize}
• Объем: ~${pageCount} страниц
• Тираж: ${printRun} экз.
• Бумага внутреннего блока: ${innerPaper}
• Бумага обложки: ${coverPaper}
• Способ скрепления: ${bindingMethod}
• Печать: ${hasImages ? 'цветная (4+4)' : 'черно-белая (1+1)'}
${hasImages ? '• Содержит иллюстрации/изображения\n' : ''}

Прошу сообщить стоимость и сроки изготовления.

Спасибо!`;
            
            // Generate Chinese output
            const chineseBinding = pageCount <= 48 ? '骑马钉' : (pageCount <= 96 ? '胶装' : '锁线胶装');
            const chineseColor = hasImages ? '彩色印刷(4+4)' : '黑白印刷(1+1)';
            
            const chineseOutput = `您好,

请报价以下印刷规格:

规格:${formatSize}
页数:约${pageCount}
印量:${printRun}
内页用纸:${hasImages ? '115克铜版纸' : '80克双胶纸'}
封面用纸:250克铜版纸+哑膜
装订方式:${chineseBinding}
印刷方式:${chineseColor}
${hasImages ? '包含图片/插图\n' : ''}

请告知价格和交货时间。

谢谢!`;
            
            // Display outputs
            document.getElementById('russianOutput').textContent = russianOutput;
            document.getElementById('chineseOutput').textContent = chineseOutput;
        }
        
        function copyToClipboard(elementId) {
            const element = document.getElementById(elementId);
            const range = document.createRange();
            range.selectNode(element);
            window.getSelection().removeAllRanges();
            window.getSelection().addRange(range);
            document.execCommand('copy');
            window.getSelection().removeAllRanges();
            
            // Show feedback
            const originalText = event.target.textContent;
            event.target.textContent = 'Copied!';
            event.target.classList.add('bg-green-100', 'text-green-700');
            setTimeout(() => {
                event.target.textContent = originalText;
                event.target.classList.remove('bg-green-100', 'text-green-700');
            }, 2000);
        }
    </script>
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=Nekruz/specbook-generator" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
</html>