рдЦреИрд░, рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ - рд╣рдо рдЗрд╕реЗ рд╣рд▓ рдХрд░реЗрдВрдЧреЗ!
1. рд╕рд╛рдмрд┐рдд рдЙрдкрдХрд░рдг
рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд▓реЗрдЖрдЙрдЯ рдХреЛ рдЧрдбрд╝рдмрдбрд╝ рдХрд┐рдП рдмрд┐рдирд╛ рдбреЙрдХреНрдЯрд░, рдбреЙрдХреНрд╕, xls, xlsx рд╕реЗ html рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХреИрд╕реЗ рдбрд┐рд╕реНрдЯрд┐рд▓ рдХрд░реЗрдВред
Apache POI: рдПрдХ рдорд╣рд╛рди рдЙрдкрдХрд░рдг рдЬрд┐рд╕рдХрд╛ рд╣рдордиреЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдореМрдЬреВрджрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕реЗ HTML рдорд╛рд░реНрдХрдЕрдк рдХреИрд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛рдПред
DocX4J: рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рд▓рдВрдмреА рдХрд╣рд╛рдиреА рд░рд╣реА рд╣реИред рд╡рд╣ рдЬрд╛рдирддреА рд╣реИ рдХрд┐ рд╣рд░ рддрд░рд╣ рдХреА рд╕реБрдЦрдж рдмрд╛рддреЗрдВ рдХреИрд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд╣ рдмрд╛рд░-рдмрд╛рд░ рд▓рд┐рдЦрддреА рд╣реИред рдФрд░ рд╢реБрд░реВ рдореЗрдВ рд╣рдо рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗред
DocX4J рдХреЗ рдиреБрдХрд╕рд╛рди: рдЖрдк рдХреЗрд╡рд▓ рдбреЙрдХреНрд╕ рдФрд░ xlsx рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдЗрддрдирд╛ рдбрд░рд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред рд╕рдорд╕реНрдпрд╛ рддрдм рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ рдЬрдм рдЖрдк HTML рдХреЛ docx рдпрд╛ xlsx рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреА рд╕рднреА рд╢реИрд▓рд┐рдпрд╛рдБ рдЬрд╛рддреА рд╣реИрдВ, рдЖрдо рддреМрд░ рдкрд░ рдлреЛрдВрдЯ рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдЖрджрд┐ред рд╣рдордиреЗ рдбреЗрд╡рд▓рдкрд░ рдХреА рдУрд░ рд░реБрдЦ рдХрд┐рдпрд╛ред рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рднреБрдЧрддрд╛рди рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - docx4j-web-editorред рд▓реЗрдХрд┐рди рднреБрдЧрддрд╛рди рдХрд┐рдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рднреА рдЕрдкрдиреЗ рдмрдЧ рдХреЗ рд╕рд╛рде рдирд┐рдХрд▓рд╛ред рдХреЛрдЯрд╕реЛрд╡ рдХреЗ рдЕрдВрдд рдореЗрдВ, рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рднреА рдЫреЛрдбрд╝рдирд╛ рдкрдбрд╝рд╛ред
рдЗрд╕рдХрд╛ рдЙрдкрд╛рдп рд▓рд┐рдмрд░рдСрдлрд┐рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдЙрд╕реЗ рд╕рд░реНрд╡рд░ рдкрд░ HTML рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рджреЗрдВред рдпрд╣ рдХреЗрд╡рд▓ рд╣рдорд╛рд░реЗ рд╡реЗрдм-рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред
рд▓рд┐рдмреНрд░реЗ рдСрдлрд┐рд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЫреЛрдЯреА рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЬреЛрдбреЙрдиреНрдХреНрд╕реЗрд╕рд░ , рдЬреЛ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЯреАрд╕реАрдкреА рд╕реЙрдХреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд┐рдмреНрд░реЗ рдСрдлрд┐рд╕ рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдлрд╛рдЗрд▓ рджреЗрддрд╛ рд╣реИ, рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдлрд╛рдЗрд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЖрддреА рд╣реИред рдпрд╣ рд╕рдм рдКрдкрд░ рд╕реВрдЪреАрдмрджреНрдз рд╕рднреА рдЬрд╛рд╡рд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд▓рд┐рдмрд░рдСрдлрд┐рд╕ рдЕрдкрдиреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдЬрд╛рд╡рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдмреЛрдЭрд┐рд▓ рдХрд╛рд░реНрдп рд╕реЗ рдореБрдХреНрдд рдХрд░рдиреЗ рдФрд░ рдПрдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдвреЗрд░ рдореЗрдВ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВред
2. рдлрд╛рдЗрд▓ рдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдЙрд╕рд╕реЗ рдПрдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдмрдирд╛рдПрдВ
рд▓реЗрдХрд┐рди jodconverter рд╕рд░реНрд╡рд░ рдкрд░ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрд▓рдЯрд╛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдПрдЪрдЯреАрдПрдордПрд▓ рдХреЛ рд╡рд╛рдВрдЫрд┐рдд рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░реЗрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджреЗрдВред
рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде jodconverter рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рдЖрд╡рд░рдг рд╡рд░реНрдЧ рд╣реИ:
Libre.java
package ru.cpro.uchteno.util; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.logging.Level; import java.util.logging.Logger; import org.artofsolving.jodconverter.OfficeDocumentConverter; import org.artofsolving.jodconverter.office.ExternalOfficeManagerConfiguration; import org.artofsolving.jodconverter.office.OfficeConnectionProtocol; import org.artofsolving.jodconverter.office.OfficeManager; public class Libre {// public static void doc2html(InputStream is, OutputStream os) {// doc html try { File inf = File.createTempFile("doc", ".doc"); // FileOutputStream infos = new FileOutputStream(inf); // // int n = 0; byte buff[] = new byte[1024]; while (n >= 0) { n = is.read(buff); if (n > 0) { infos.write(buff, 0, n); } } // is.close(); infos.close(); // File onf = File.createTempFile("doc", ".html"); // jodconverter' ExternalOfficeManagerConfiguration officeConfiguration = new ExternalOfficeManagerConfiguration(); // tcp officeConfiguration .setConnectionProtocol(OfficeConnectionProtocol.SOCKET); // officeConfiguration.setPortNumber(2002); // officeManager OfficeManager officeManager = officeConfiguration .buildOfficeManager(); // officeManager.start(); // OfficeDocumentConverter converter = new OfficeDocumentConverter( officeManager); // converter.convert(inf, onf); // officeManager.stop(); // FileInputStream outfis = new FileInputStream(onf); n = 0; while (n >= 0) { n = outfis.read(buff); if (n > 0) { os.write(buff, 0, n); } } // outfis.close(); os.close(); // inf.delete(); onf.delete(); } catch (IOException ex) { Logger.getLogger(Libre.class.getName()).log(Level.SEVERE, null, ex); } } public static void doc2pdf(InputStream is, OutputStream os) { try { File inf = File.createTempFile("doc", ".doc"); FileOutputStream infos = new FileOutputStream(inf); int n = 0; byte buff[] = new byte[1024]; while (n >= 0) { n = is.read(buff); if (n > 0) { infos.write(buff, 0, n); } } is.close(); infos.close(); File onf = File.createTempFile("doc", ".pdf"); ExternalOfficeManagerConfiguration officeConfiguration = new ExternalOfficeManagerConfiguration(); officeConfiguration .setConnectionProtocol(OfficeConnectionProtocol.SOCKET); officeConfiguration.setPortNumber(2002); OfficeManager officeManager = officeConfiguration .buildOfficeManager(); officeManager.start(); OfficeDocumentConverter converter = new OfficeDocumentConverter( officeManager); converter.convert(inf, onf); officeManager.stop(); FileInputStream outfis = new FileInputStream(onf); n = 0; while (n >= 0) { n = outfis.read(buff); if (n > 0) { os.write(buff, 0, n); } } outfis.close(); os.close(); inf.delete(); onf.delete(); } catch (IOException ex) { Logger.getLogger(Libre.class.getName()).log(Level.SEVERE, null, ex); } } public static void html2doc(InputStream is, OutputStream os) { try { File inf = File.createTempFile("doc", ".html"); FileOutputStream infos = new FileOutputStream(inf); int n = 0; byte buff[] = new byte[1024]; while (n >= 0) { n = is.read(buff); if (n > 0) { infos.write(buff, 0, n); } } is.close(); infos.close(); File onf = File.createTempFile("doc", ".doc"); ExternalOfficeManagerConfiguration officeConfiguration = new ExternalOfficeManagerConfiguration(); officeConfiguration .setConnectionProtocol(OfficeConnectionProtocol.SOCKET); officeConfiguration.setPortNumber(2002); OfficeManager officeManager = officeConfiguration .buildOfficeManager(); officeManager.start(); OfficeDocumentConverter converter = new OfficeDocumentConverter( officeManager); converter.convert(inf, onf); officeManager.stop(); FileInputStream outfis = new FileInputStream(onf); n = 0; while (n >= 0) { n = outfis.read(buff); if (n > 0) { os.write(buff, 0, n); } } outfis.close(); os.close(); inf.delete(); onf.delete(); } catch (IOException ex) { Logger.getLogger(Libre.class.getName()).log(Level.SEVERE, null, ex); } } public static void html2docx(InputStream is, OutputStream os) { try { File inf = File.createTempFile("doc", ".html"); FileOutputStream infos = new FileOutputStream(inf); int n = 0; byte buff[] = new byte[1024]; while (n >= 0) { n = is.read(buff); if (n > 0) { infos.write(buff, 0, n); } } is.close(); infos.close(); File onf = File.createTempFile("doc", ".docx"); ExternalOfficeManagerConfiguration officeConfiguration = new ExternalOfficeManagerConfiguration(); officeConfiguration .setConnectionProtocol(OfficeConnectionProtocol.SOCKET); officeConfiguration.setPortNumber(2002); OfficeManager officeManager = officeConfiguration .buildOfficeManager(); officeManager.start(); OfficeDocumentConverter converter = new OfficeDocumentConverter( officeManager); converter.convert(inf, onf); officeManager.stop(); FileInputStream outfis = new FileInputStream(onf); n = 0; while (n >= 0) { n = outfis.read(buff); if (n > 0) { os.write(buff, 0, n); } } outfis.close(); os.close(); inf.delete(); onf.delete(); } catch (IOException ex) { Logger.getLogger(Libre.class.getName()).log(Level.SEVERE, null, ex); } } public static void html2pdf(InputStream is, OutputStream os) { try { File inf = File.createTempFile("doc", ".html"); FileOutputStream infos = new FileOutputStream(inf); int n = 0; byte buff[] = new byte[1024]; while (n >= 0) { n = is.read(buff); if (n > 0) { infos.write(buff, 0, n); } } is.close(); infos.close(); File onf = File.createTempFile("doc", ".pdf"); ExternalOfficeManagerConfiguration officeConfiguration = new ExternalOfficeManagerConfiguration(); officeConfiguration .setConnectionProtocol(OfficeConnectionProtocol.SOCKET); officeConfiguration.setPortNumber(2002); OfficeManager officeManager = officeConfiguration .buildOfficeManager(); officeManager.start(); OfficeDocumentConverter converter = new OfficeDocumentConverter( officeManager); converter.convert(inf, onf); officeManager.stop(); FileInputStream outfis = new FileInputStream(onf); n = 0; while (n >= 0) { n = outfis.read(buff); if (n > 0) { os.write(buff, 0, n); } } outfis.close(); os.close(); inf.delete(); onf.delete(); } catch (IOException ex) { Logger.getLogger(Libre.class.getName()).log(Level.SEVERE, null, ex); } } }
3. рд╣рдо рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ
рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ HTML рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЙрд╕ рдкрд░ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЪрд╛рд▓рди рд╡реЗрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдм рдХреБрдЫ рдЖрд╕рд╛рдиреА рд╕реЗ рд╡рд░реНрдгрди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
4. рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ рджреГрд╢реНрдп рд╕рдВрдкрд╛рджрди
рджреГрд╢реНрдп рд╕рдВрдкрд╛рджрдХреЛрдВ рдХреА рдЕрдкрдиреА рдЦрд╝рд╛рд╕рд┐рдпрдд рд╣реИ - рджреГрд╢реНрдп рд╕рдВрдкрд╛рджрдХ HTML рдХреЛрдб рдХреЛ рдЦрд░рд╛рдм рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЬрдм рдкреАрдЫреЗ рдХреА рдУрд░ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ рдкреВрд░рд╛ рд▓реЗрдЖрдЙрдЯ рдорд╛рдиреНрдпрддрд╛ рд╕реЗ рдкрд░реЗ рд╡рд┐рдХреГрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд╡рд┐рднрд┐рдиреНрди рд╕рдВрдкрд╛рджрдХреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рджреМрд░рд╛рди, рд╣рдо рдЗрд╕
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдкрд░реАрдХреНрд╖рдг рдФрд░ рддреНрд░реБрдЯрд┐
tinymce.init({ selector: "textarea", theme: "modern", fullpage_default_doctype: "<!DOCTYPE xhtml>", plugins: [ "advlist autolink lists link image charmap print preview hr anchor pagebreak", "searchreplace wordcount visualblocks visualchars code fullscreen", "insertdatetime media nonbreaking save table contextmenu directionality", "emoticons template paste textcolor fullpage" ], toolbar1: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image", toolbar2: "print preview media | forecolor backcolor emoticons", image_advtab: true });
рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рд░, DOM рдореЗрдВ рд╕рдВрдкрд╛рджрдХ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
tinyMCE.triggerSave();
рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ
tinyMCE.triggerSave();
5. рддреИрдпрд╛рд░ рджрд╕реНрддрд╛рд╡реЗрдЬ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ
рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо рдлрд┐рд░ рд╕реЗ
Libre.java
рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
рдХрдиреНрд╡рд░реНрдЯ html рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЙрдХреНрдЯрд░ -
html2doc()
HTML рдХреЛ docx рдореЗрдВ рдмрджрд▓реЗрдВ -
html2docx()
HTML рдХреЛ PDF рдореЗрдВ рдмрджрд▓реЗрдВ -
html2pdf()
рд╡рд╣, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдм рд╣реИред рд╣рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА рдЕрдЧрд░ рдпрд╣ рд▓реЗрдЦ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдирдЦрд░реЗ рдХреЗ рд╕рд╛рде рдирд╛рдЪрдиреЗ рдореЗрдВ рд▓рдЧрдиреЗ рд╡рд╛рд▓реЗ рд╕рдордп рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ!
рджреНрд╡рд╛рд░рд╛ рддреИрдпрд╛рд░ рд╕рд╛рдордЧреНрд░реА: akaiser , boiler5 ред